[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: