Autor Wątek: Obliczanie wartości z eksponentu i mantysy  (Przeczytany 10741 razy)

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4568
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Obliczanie wartości z eksponentu i mantysy
« dnia: 2012.07.26, 09:53:51 »
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

  • *****
  • Wiadomości: 6941
  • Miejsce pobytu:
    Warszawa
Odp: Obliczanie wartości z eksponentu i mantysy
« Odpowiedź #1 dnia: 2012.07.26, 10:22:34 »
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

  • Administrator
  • *****
  • Wiadomości: 4568
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Obliczanie wartości z eksponentu i mantysy
« Odpowiedź #2 dnia: 2012.07.26, 10:31:14 »
Chce otrzymać longa, a procedura przeliczająca ma powstać w Javie.

trojacek

  • *****
  • Wiadomości: 6941
  • Miejsce pobytu:
    Warszawa
Odp: Obliczanie wartości z eksponentu i mantysy
« Odpowiedź #3 dnia: 2012.07.26, 10:42:27 »
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

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Obliczanie wartości z eksponentu i mantysy
« Odpowiedź #4 dnia: 2012.07.26, 11:19:56 »
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.

trojacek

  • *****
  • Wiadomości: 6941
  • Miejsce pobytu:
    Warszawa
Odp: Obliczanie wartości z eksponentu i mantysy
« Odpowiedź #5 dnia: 2012.07.26, 11:26:26 »
Napisał "long", a long reprezentuje liczbę całkowitą ze znakiem.

matofesi

  • *****
  • Wiadomości: 2073
  • Miejsce pobytu:
    Toruń/Poland
Odp: Obliczanie wartości z eksponentu i mantysy
« Odpowiedź #6 dnia: 2012.07.26, 11:34:42 »
Wiem co napisał, ale z rozmowy poza forum o tym co robi i do czego mu to potrzebne uważam, że się walnął i potrzebuje to o czym napisałem ;)

RCL

  • *
  • Wiadomości: 49
  • Miejsce pobytu:
    Warszawa
    • RCL/RS/VVG
Odp: Obliczanie wartości z eksponentu i mantysy
« Odpowiedź #7 dnia: 2012.10.01, 02:24:07 »
Czy problem pozostał nierozwiązany?

Najprościej by było skonwertować taką liczbę na double (we float się significand-mantysa nie zmieści - choć można zaokrąglić) samymi operacjami bitowymi, ponoć nawet w Javie (fuj) to można poprzez intBitsToDouble.