[zxspectrum] Re: Aggiornata routine matematica MUL
- From: Enrico Maria Giordano <e.m.giordano@xxxxxxxxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Sat, 15 Aug 2015 09:01:42 +0200
Il 15/08/2015 08:43, Paolo Ferraris ha scritto:
Sfortunatamente non ho risposte ma solo domande, per il momento.
Non importa, vanno bene ugualmente. :-)
Le domande sono relative al tipo di rappresentazione dei numeri della
tua calcolatrice.
Non è una calcolatrice ma un sistema di routine di calcolo. La
calcolatrice ne è solo un'applicazione.
1) E` a virgola fissa o mobile? (In poche parole, c'e` un esponente o
un certo numero di cifre o bit e` dedicato alla parte intera ed un
certo altro a quella decimale?)
A virgola mobile, c'è un esponente. Comunque è scritto tutto qui:
http://www.emagsoftware.it/spectrum/math.txt
2) E` binaria o decimale (8 bit per byte oppure 1 o 2 cifre decimali
per byte).
8 bit per byte.
3) Sarei curioso di sapere quali sono i problemi che cerchi di
risolvere con la tua calcolatrice.
Il fatto che in floating-point tradizionale non è possibile (in
generale) inizializzare un numero con un valore decimale preciso
apparentemente semplice. Mentre con le mie routine sì in quanto
l'esponente indica le cifre frazionarie in base 10 e non in base 2.
Se la risposta alla domanda 3 e` la perdita di precisione per numeri
come 0,1 (un decimo) hai ragione.
Sì, il problema non è la perdita di precisione nei calcoli (quella è
inevitabile se si hanno un numero di cifre frazionarie non illimitato)
ma il fatto che uno inizializza con un valore e ne ottiene un altro
leggermente diverso.
Inoltre c'è la precisione dinamica che può arrivare fino a 616 cifre
significative, scusa se è poco. :-)
Pero` in realta` non e` sufficiente. Non appena dividi per esempio 5
per 3 ottieni un numero che non ha una rappresentazione finita non
solo in forma binaria ma anche decimale.
Quello è un altro problema.
L'unico modo che mi viene in mente per non perdere precisione nelle
quattro operazioni e` rappresentare i numeri come frazioni di numeri
interi a lunghezza variabile. Per esempio 5 diviso 3 e`... 5/3. E
5/3 + 1/2 e` 13/6, e cosi` via. I calcoli diventano pero` piu`
complicati, e comunque non appena provi a calcorare una radice
quadrata... :-)
Sì, lo so, la rappresentazione con numeri razionali. Ma purtroppo non
risolve tutti i problemi.
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
Other related posts: