View Single Post
Old 17-10-2011, 17:28   #4
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6404
Codice:
double temp = 0.0;
double ttt = (ptr->_pdd * ptr->_ndd->_temp3)
              + (ptr->_pdu * ptr->_ndu->_temp3)
              + (ptr->_pud * ptr->_nud->_temp3)
              + (ptr->_puu * ptr->_nuu->_temp3);
temp = ttt;
In questo caso non conosci l'ordine delle somme, che non necessariamente sono eseguite nell'ordine che hai scritto se attivi le ottimizzazioni ( -O3 ad esempio). Quindi, essendo la somma tra floating point non commutativa, puoi avere valori diversi tra i due casi.

Nel tuo caso potrebbe bastare disabilitare TUTTI i flags di ottimizzazione ( -O0 ad esempio), per verificare in fase di debug se i risultati tra i due casi coincidono.

A+B != B+A con A e B floating point.

Ultima modifica di Unrue : 17-10-2011 alle 17:36.
Unrue è offline   Rispondi citando il messaggio o parte di esso