|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6103
|
[C++] Confronto tra floating point
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. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:25.