Sergio ha scritto:A quanto ne so, format rat è solo una approssimazione con frazioni continue.
Si, però se non vado errato, un computer (standard, 64-bits) approssima i numeri reali con i numeri macchina \( F(2,53,-1021,2014) \) e con format rat osservi cosa succede in memoria nel computer quando gli dai in pasto un numero reale, chiaramente il computer deve "discretizzare" e approssimarlo con un numero macchina e \( 10^{23} \) non è un numero macchina e dunque lo approssima con una frazione. In questo senso intendevo che il computer interpreta \( 10^{23} \) come \(99999999999999991611392 \) perché effettivamente in memoria lo scrive così, in quanto \( 10^{23} \not\in F \).
E io mi domandavo se diamo ad un computer un numero che non è un numero macchina potrà solo approssimarlo per una frazione, pertanto con quali algoritmi può un software ricavare il risultato esatto di una sottrazione tra un numero che non è macchina e la sua approssimazione ?? Se volessi fare una calcolatrice in c++ (e ti assicuro che non è il caso
) il mio computer non capisce il significato di \( 10^{23} \) (come anche di altri numeri molto più piccoli).
In generale un computer "capisce pochissimi" numeri in maniera esatta, tutti gli altri numeri sono approssimazioni. Ad esempio diciamo che le \(x,y \) sono due numeri che hanno la stessa approssimazione in numero macchina ovvero \( x \neq y \) ma \( \operatorname{fl}(x) = \operatorname{fl}(y) \) ed inoltre abbiamo pure il caso che \( \operatorname{fl}(x) \neq x \).
Chiaramente abbiamo che \( x - y \neq 0 \) ma come fa un software a restituirmi il valore esatto della differenza (o una sua approssimazione) se il computer interpreta \( x \) e \( y \) come numeri macchina che sono uguali e dunque interpreta il calcolo come \( \operatorname{fl}( \operatorname{fl}(x) - \operatorname{fl}(y) )= \operatorname{fl}(0)=0 \) ??
Nel nostro esempio abbiamo che
\( x= 10^{23} \) e \( y =99999999999999991611392 \)
\( \operatorname{fl}(x)=\operatorname{fl}(y)=99999999999999991611392\)
Se voglio creare una calcolatrice che datogli l'input \( x- y \) mi restituisce \( 8388608 \) ovvero la differenza esatta (credo
), come faccio? Il mio computer quando gli scrivo
\( x- y \) interpreta la cosa come \( 99999999999999991611392 - 99999999999999991611392 = 0 \) quindi come faccio a recuperare l'errore di approssimazione??