ZX Spectrum > PROGRAMOWANIE
Obliczanie wartości z eksponentu i mantysy
Tygrys:
W Basicu ZX Spectrum wartości liczbowe zapisywane są w 5 bajtach. 1 bajt o eksponent a 4 pozostałe to mantysa. Z liczbami 16-bitowymi nie ma problemu - znak określa najstarszy bit w pierwszym bajcie mantysy, dalej jest młodszy i starszy bajt liczby.
Jak obliczyć wartość dla liczb używających eksponentu?
trojacek:
Co dla Ciebie oznacza "obliczyć"? Przecież liczba zapisana na 5 bajtach jest "obliczona", tzn. ma jednoznaczny zapis swojej wartości. Na co chcesz ją przeliczyć? Na longa bez eksponentu? W jakim języku i na jakiej platformie?
Tygrys:
Chce otrzymać longa, a procedura przeliczająca ma powstać w Javie.
trojacek:
Jeśli ograniczysz przedział wartości do dopuszczalnych przez 32-bitowego longa, możesz używać natywnego kalkulatora javy :). Jeżeli jednak chcesz się "zmieścić" z całym zakresem (coś tam razy 10E(+-)38, o ile pamiętam) to musisz zapomnieć o longu i zdefiniować własny typ (myslę, że 100 bitów wystarczy, bo liczba 40-cyfrowa zajmuje 20 bajtów = 160 bitów w kodzie BCD, czyli 100 bitów w kodzie "pełnym") i napisać własny kalkulator z operacjami: mnożenia przez 10 (prościzna - kombinacja mnożenia przez 2 i dodawania) oraz dzielenia przez 10 (gotowce znajdziesz w sieci). Przepisujesz mantysę do nowego typu, uzupełniasz od lewej zerami lub jedynkami zależnie od znaku liczby, a następnie w pętli o liczbie cykli równej eksponentowi mnożysz razy 10 (jeśli eksponent jest dodatni) lu dzielisz przez 10 (jesli ujemny). Jeśli eksponent = 0, zostawiasz mantysę w spokoju.
matofesi:
Eeee... Chyba nie o to chodzi... Na ile rozumiem Tygrys chciałby dostać procedurę konwersji z pięciobajtowego floata ZX BASICa na string albo reprezentację zmiennoprzecinkową dowolnego innego języka we współczesnych komputerach.
Nawigacja
[#] Następna strona
Idź do wersji pełnej