Pensare che i risultati in virgola mobile dovrebbero sempre produrre lo stesso risultato è in qualche misura fuorviato.
La maggior parte delle implementazioni oggi utilizza aritmetica in virgola mobile IEEE 754 a precisione a 32 bit e precisione doppia a 64 bit. È possibile utilizzare il doppio lungo che è 64 bit, 80 bit o 128 bit a seconda dell'implementazione, quindi non darà risultati identici. Ma dà risultati migliori . Quindi puoi scegliere tra i risultati migliori e identici . Cosa preferisci, migliore o identico? Preferisco "meglio".
Il tuo compilatore potrebbe rendere disponibile o meno l'opzione moltiplicata per fusione. Se disponibile, ti dà più precisione, più velocità e risultati diversi. Cosa preferisci, più veloce e migliore, o identico? Preferisco "più veloce e migliore".
Se i risultati su due implementazioni sono leggermente diversi, non c'è problema. Se sono molto diversi, sei fortunato (tipo): hai appena scoperto che c'è un problema con i tuoi calcoli. Se hai i risultati A e B, e sono diversi, e non hai motivo per cui A o B sarebbe il risultato migliore e l'altro sarebbe sbagliato, ora sai che i tuoi calcoli producono solo risultati sbagliati e devono essere corretti . Con risultati identici, non avresti mai saputo.
Puoi considerarti fortunato se pensi che avere risultati cattivi e sapere che è meglio che avere risultati cattivi e non sapere.