swiniaczek
Guest
Fri May 28, 2004 8:40 pm
Witam;
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)
pozdr.
swiniaczek
Milosz Skowyra
Guest
Fri May 28, 2004 9:57 pm
swiniaczek wrote:
Quote:
Witam;
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)
Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
znaku, 8 bitow cechy i reszta to mantysa. Cecha jest suma wykladnika
potegi liczby 2 i liczby 127 (w celu umozliwienia zapisu liczb
ujemnych), przez ktorą nalezy pomnozyć mantyse, aby otrzymac calą
liczbe. Ergo _AFAIR_ w celu pomnozenia nalezy sprowadzic przez
normalizacje cechy do odpowiedniej pozycji przecinka i dodac mantysy.
Ale moge sie mylic bo to dawno na uczelni mialem. W sieci mnostwo jest
opisow.
--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek@fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|
Adam Dybkowski
Guest
Fri May 28, 2004 10:02 pm
swiniaczek wrote:
Quote:
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)
Nikt ci nie każe zapisywać liczb w standardzie IEEE. Dowolną wielkość
liczb osiągniesz łatwo dokonując przekształceń na ciągach znaków. Akurat
mnożenie jest w miarę proste - tak jakbyś to sam robił zapisując liczby
na kartce. A czy liczba będzie miała 10 cyfr, czy 1000 - to już mało
istotne. Dla uproszczenia sprawy możesz przed mnożeniem skonwertować
obie liczby na całkowite (mnożąc w podanym przypadku przez 10^6) a po
operacji przekształcić spowrotem. Można też mnożyć liczby z przecinkiem
dziesiętnym albo zapisane w inny sposób (np. hex) - wszystko zależy od
twojej inwencji.
BTW: Zdaje się, że standardowy unixowy kalkulator 'bc' właśnie używa
tekstowych operacji na dowolnie wielkich liczbach.
--
Adam Dybkowski
adybkows@amwaw.edu.pl
http://www.amwaw.edu.pl/~adybkows/
J.F.
Guest
Fri May 28, 2004 11:41 pm
On Sat, 29 May 2004 00:57:06 +0200, Milosz Skowyra wrote:
Quote:
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)
Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
znaku, 8 bitow cechy i reszta to mantysa.
24 bity mantysy - to tak mniej wiecej wlasnie 7 cyfr dziesietnych.
Ale i tak rzad dokladniej niz tu trzeba na to 1.000002 - ale zabraknie
3 bitow na dokladne tych 98 mln.
No coz - trzeba poszukac kompilatora z typem double, albo kombinowac,
albo nie wymyslac zadan ktore procka przerastaja ..
J.
Zbigniew Jachimowicz
Guest
Fri May 28, 2004 11:49 pm
Witam
Quote:
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Może tak. A x (1 + 0.000002) = A + A x 0.000002. Mnożysz A przez 2, dzielisz
przez liczbę pozycji po przecinku(10^n) i dodajesz A.
--
Wysłano z serwisu Usenet w portalu Gazeta.pl ->
http://www.gazeta.pl/usenet/
Milosz Skowyra
Guest
Sat May 29, 2004 10:51 am
"J.F." wrote:
Quote:
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)
Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
znaku, 8 bitow cechy i reszta to mantysa.
24 bity mantysy - to tak mniej wiecej wlasnie 7 cyfr dziesietnych.
Tia, faktetycznie. Pozostaje podwojna precyzja i mozna zrobic to
identycznie, w koncu operacje na cechach i mantysach generalnie polegaja
na suwaniu bitami to w prawo to w lewo, wiec praktycznie bez znaczenia
czy zrobimy to na 8 bajtach czy na 4.
--
Regards. Przy odpowiedzi usun "." przed "net" z adresu!!!
|-----------------------------------------------------|
| Milosz Skowyra GSM Mobile +48 600 95 35 72 |
| miloszek@fido.net.org.pl 2:484/2.47 on fidonet |
|-----------------------------------------------------|
Piotr Wyderski
Guest
Sat May 29, 2004 11:13 am
swiniaczek wrote:
Quote:
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Za pomoca samych rejestrow bedzie trudno, ale jesli w tym
procesorze jest jeszcze jakis sumator, to nie bedzie z tym
problemu.

Sprecyzuj tylko jaka postac maja liczby do
pomnozenia: czy format staloprzecinkowy wystarczy, czy tez
koniecznie potrzebujesz zmiennego przecinka? W obu
przypadkach sprowadzi sie to jednak do pomnozenia dwu duzych
liczb naturalnych, co jest prosta operacja, nawet w podstawowce
ucza jednego z algorytmow mnozenia. Zamiast niej proponuje jednak
algorytm rosyjskich wiesniakow, bo wymaga tylko prostej sekwencji
przesuniec i dodawan.
Pozdrawiam
Piotr Wyderski
Marcin Zajdel
Guest
Mon May 31, 2004 8:56 am
Kompilator o nazwie CrosWare (dla wielu rodzajow prockow) obsluguje typ
Double.
Tylko ze przydalaby sie pelna wersja, nie trialowa (15dni) i bez
ograniczenia dlugosci kodu wynikowego)
Pozdrawiam
--
Z powazaniem
Marcel
#GG: 654827
Użytkownik "J.F." <jfox_nospam@poczta.onet.pl> napisał w wiadomości
news:0lmfb09bh6ce5fic025q3bsib20a183ph4@4ax.com...
Quote:
On Sat, 29 May 2004 00:57:06 +0200, Milosz Skowyra wrote:
Jak pomnożyć dwie liczby np. 98123456 x 1.000002 = 98123652 za pomocą
rejestrów procesora 8 bitowego.
Przekształcenia na typ "float" nie dadzą rezultatu ( mantyse w IEEE 754
reprezentuje 7 cyfr dziesiętnych)
Cos krecisz. W pojedynczej precyzji wg. IEE754 masz 4 bajty, 1 bit
znaku, 8 bitow cechy i reszta to mantysa.
24 bity mantysy - to tak mniej wiecej wlasnie 7 cyfr dziesietnych.
Ale i tak rzad dokladniej niz tu trzeba na to 1.000002 - ale zabraknie
3 bitow na dokladne tych 98 mln.
No coz - trzeba poszukac kompilatora z typem double, albo kombinowac,
albo nie wymyslac zadan ktore procka przerastaja ..
J.