Entra

View Full Version : [C++] Confronto tra floating point


Unrue
27-12-2007, 16:33
Ciao ragazzi,
mi stavo interessando al confronto tra floats, leggendo questo articolo :
http://c-faq.com/fp/fpequal.html

Soprattutto l'ultimo modo di confronto è molto interessante. Nella mia applicazione però, devo testare se floats molto piccoli sono zero. Ora, la precisione di rappresentazione di un floats dipende dal loro valore assoluto. Quello che non ho capito è: se l'accuratezza diminuisce quando il float è molto grande, diminuisce anche quando il numero è molto piccolo? Se si, quale è il modo migliore per testare se un float è, non dico zero secco, ma molto vicino ad esso ? Grazie.

cionci
27-12-2007, 17:27
Lo devi valutare in base all'operazione che ha portato al calcolo del numero floating point...

Se a - b = c e c è molto minore di a e di b allora c è zero (lo devi confrontare usando la differenza relativa trovata nel link che hai postato).

Se a + b = c (ovviamente sia a che b positivi), c non è mai zero a meno che sia a che b siano valutabili come zero

Se a * b = c, c non è mai zero a meno che a o b siano valutabili come zero a loro volta

Se a / b = c, c non è mai zero a meno che a sia valutabile come zero a sua volta

Quindi in pratica l'operazione fondamentale da controllare è la sottrazione.

Riguardo alle funzioni ovviamente basta un piccolo studio...ad esempio: b = sin(a) non è zero a meno che b sia a sua volta valutabile come zero o sia un multiplo pi.

Purtroppo bisogna andare avanti così perché non si hanno termini di paragone assoluti da usare come margini per il confronto.