In questi giorni ho scritto una variante delle mie routine matematiche
che, invece di usare esponente decimale usa esponente binario.
Mi spiego meglio. Le mie routine matematiche "classiche" sono studiate
per la massima precisione, nel senso che se io scrivo, ad esempio, 58.6
quello è proprio il numero che viene memorizzato, e più precisamente
Mantissa: 586 Esponente: 1
ad indicare che il numero è 586 * 10 elevato alla -1 che è, appunto,
58.6. In altre parole, l'esponente indica di quante posizioni si deve
spostare il punto decimale a partire da destra. Quindi
586 Esponente 1 = 1 posizione a partire da destra = 58.6
Questo però rende, in generale, le routine più lente rispetto a quelle
binarie (non sto a spiegare esattamente il perché per non rendere troppo
complicato questo messaggio ma ne faccio un accenno più sotto).
Allora ho ideato questa variante che memorizza il numero come
moltiplicato per 2 elevato all'esponente indicato. Più o meno come
faceva il vecchio FractInt (chi se lo ricorda?).
Questo rende i valori meno precisi in quanto non è detto che un numero
rappresentato in decimale come 58.6 possa venire rappresentato
esattamente in binario neanche usando un numero di cifre altissimo (o
infinito).
Però di contro sono più veloci perché le operazioni di normalizzazione,
invece di richiedere moltiplicazioni e divisioni per 10 (che sono
complicate), necessitano di moltiplicazioni e divisioni per 2 (che sono
semplici shift, operazioni veloci da eseguire per il processore).
Il risultato è il TAP allegato (Mandel Binary Float) che disegna lo
stesso frattale dell'esempio che vi feci vedere a suo tempo ma è
visibilmente più veloce.
EMG
--
http://www.emagsoftware.it
http://www.emagsoftware.it/emgmusic
http://www.emagsoftware.it/spectrum
http://www.emagsoftware.it/tbosg
Attachment:
Mandelbf.zip
Description: Zip compressed data