[zxspectrum] Ancora routine matematiche

  • From: Enrico Maria Giordano <e.m.giordano@xxxxxxxxxxxxxxx>
  • To: The ZX Spectrum Mailing-List <zxspectrum@xxxxxxxxxxxxx>
  • Date: Thu, 19 Jan 2017 14:54:06 +0100

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

Other related posts: