|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
La funzione segno e l'inferno dei numeri reali
Mi serviva una funzione che mi restituisse il segno di un numero e mi sono fatto questa:
template<class T> inline const T SEGNO(const T &a ) {return a >= 0 ? 1 : -1;} Poi mi è capitato di pensare all'aritmetica floating point e mi sono detto: se è un numero picccolissimo minore di zero l' a.f.p lo arrotonda a zero e sballa. Poi mi sono ricordato che esistono lo zero negativo e positivo. Secondo voi la funzione è affidabile? Per parlare poi delle safe comparisons e tutte le possibili dannazioni dello Real Inferno, potremmo-potreste raggruppare e postare tutte le comparazioni affidabili in floating point? (==, <= etc e tutte quelle che non mi vengono in mente...) Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
L'uguaglianza non si verifica mai con i numeri FP...
In teoria dovrebbe comunque funzionare sempre... |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Jan 2001
Messaggi: 1976
|
per cominciare
google: "macheps" P.S. allora Piazza Plebiscito o Pert ? |
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
Quote:
|
||
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Il problema nella comparazione classica
if ( fabs(a-b) <= Machine_Epsilon * fabs(a)) è che non funziona se a è uguale zero: Quote:
Ops scusatemi,non sono di Matt Austern(magari);la risposta è di Matt Austern http://cpptips.hyperformix.com/cpptips/fp_eq Avevo pensato di mettere tutto in un header in modo da avere a disposizione sempre le capacità della macchina: #include <limits> ... numeric_limits<double> double_info; const double EPS=double_info.epsilon(); ... ma dice che non è l'ideale se hai 50 moduli che utilizzano lo stesso header. Che ne pensate? |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Insomma...ma funziona o no la tua funzione ? In ogni caso se c'è un epsilon negativo o positivo puoi sempre vedere che sia maggiore o minore di 0...
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2000
Messaggi: 551
|
Quote:
Mi riferivo nel mio ultimo post a quelle funzioni che cercano di appurare più o meno affidabilmente se 2 numeri sono uguali . Scusatemi,avrei dovuto dirlo esplicitamente ps a2000 quando ti serve non c'è mai. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:05.



















