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
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
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.
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.
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.
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.
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.
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
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
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.