Sulla rappresentazione in virgola mobile

Sulla rappresentazione in virgola mobile

Messaggioda ilario.mazzei il dom 3 ott 2010, 23:29

ciao a tutti,
sto scrivendo un programma in cui ho bisogno di ottenere dei valori numerici il piu' possibile precisi; il problema è che utilizzando il tipo float (virgola mobile a 32 bit) non viene rispettato il primo principio di equivalenza:

a=pi=3.1415927
b=\sqrt{2}=1.4142135
c=\sqrt{3}=1.7320508

x1=a*b=4.442883
x2=x1+c=6.174934

x2-x1=1.7320509\neq c

ripetendo le stesse operazioni con il tipo double (virgola mobile a 64 bit) i valori sono corretti.
Qualcuno di voi mi sa dire se utilizzando il tipo double si possono verificare dei casi simili a quello che ho riportato?
ilario.mazzei
 
Messaggi: 26
Iscritto il: sab 31 lug 2010, 11:36

Aritmetica Imperfetta

Messaggioda rrronny il lun 4 ott 2010, 0:31

ilario.mazzei ha scritto:[...] utilizzando il tipo double si possono verificare dei casi simili a quello che ho riportato?

Sì, si verificano problemi simili (click). In generale, è un fatto noto che l'aritmetica in virgola mobile (basata sia su variabili float che double) non è associativa, non è distributiva e pur avendo l'elemento neutro dell'addizione e della moltiplicazione essi non sono unici.

Esempio. Prova a vedere se fornisce lo stesso risultato l'esecuzione delle seguenti due operazioni: 3.0 + (10^{1000} - 10^{1000}) e (3.0 + 10^{1000}) - 10^{1000}.
"Realtà virtuale", "social network", "realtà aumentata"? Io parlerei di "solitudine aumentata", quella che percepisci anche stando in mezzo agli altri, e che occorre della tecnologia per appianarla.
Avatar utente
rrronny
 
Messaggi: 737
Iscritto il: mer 17 giu 2009, 20:51
Località: Pisa

Messaggioda ilario.mazzei il lun 4 ott 2010, 11:17

... non me l'aspettavo :blink:
...vorrà dirre che dovrò scrivere parecchi test ...

grazie rrronny
ilario.mazzei
 
Messaggi: 26
Iscritto il: sab 31 lug 2010, 11:36

Messaggioda fry il lun 4 ott 2010, 11:21

Se si necessità di una precisione davvero elevata nei calcoli in virgola mobile conviene utilizzare la GNU MP Bignum Library.
"Hey. They laughed at Louis Armstrong when he said he was gonna go to the moon. Now he's up there, laughing at them."
Avatar utente
fry
 
Messaggi: 1122
Iscritto il: ven 20 giu 2008, 19:06


Torna a Algoritmi e strutture dati

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite