Questa è più complicata. :-)
Ho aggiornato la documentazione sul mio sito. La riporto qui:
NRD - Normalize float down
IX = Data HL = 10^(dec-B) C = Data len B = Dec
Normalizza il dato puntato da IX riducendo i decimali al valore
contenuto in B e dividendo la mantissa per l'opportuna potenza di
dieci. Ad esempio, 12345678 5 (123.45678) con B = 3 diventerebbe
123456 3 (123.456). La lunghezza della mantissa del dato è contenuta
in C. HL deve puntare ad un dato contenente il valore 10^(dec-B),
dove dec è il numero di decimali attuali. Nell'esempio 10^(5-3) = 100.
Ora dovrebbe essere più chiara. :-)
Eppure guardate la routine quanto è semplice:
LD (IX+0),B
INC IX
CALL DIV
RET
Non ha confronto con, ad esempio, la moltiplicazione. E tutti sanno
cos'è una moltiplicazione. Tanto per dire che a volte è più difficile
spiegare una cosa più semplice. :-)
A cosa serve in pratica? Se faccio una moltiplicazione tra numeri
floating point:
1.234 * 5.678 = 7,006652
come potete vedere, il numero di cifre decimali è raddoppiato (da 3 per
ogni operando è andato a 6 per il risultato). Se continuassi nelle
moltiplicazioni alla fine avrei una sfilza infinita di decimali per cui
il sistema andrebbe molto presto in overflow.
La routine NRD serve proprio a limitare il numero di cifre decimali.
Quindi, se decidessi che il risultato deve avere 3 cifre decimali come
gli operandi otterrei
1.234 * 5.678 = 7,006
e a questo punto ulteriori moltiplicazioni manterrebbero le cifre
decimali sempre costanti a 3.
EMG
--
EMAG Software Homepage: http://www.emagsoftware.it
The EMG Music page: http://www.emagsoftware.it/emgmusic
The EMG's ZX-Spectrum Page: http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: http://www.emagsoftware.it/tbosg