Mnożenie dużych liczb

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

Reply to
swiniaczek
Loading thread data ...

Witam

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.

Reply to
Zbigniew Jachimowicz

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.

Reply to
Milosz Skowyra

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.

Reply to
Adam Dybkowski

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.

Reply to
J.F.

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.

Reply to
Milosz Skowyra

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

Reply to
Piotr Wyderski

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

Reply to
Marcin Zajdel

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.