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.