-freciprocal-math
in GCC cambia il seguente codicePerché è -freciprocal-math non sicuro in GCC?
double a = b/c;
a
double tmp = 1/c;
double a = b * tmp;
Nel manuale di GCC, si dice che una tale ottimizzazione è pericoloso e non è incollata agli standard IEEE. Ma non riesco a pensare ad un esempio. Puoi dare un esempio a riguardo?
Considerare b = c = 3 –
I IEEE non dispone di regole su come un compilatore deve utilizzare il punto mobile. Ad esempio, X^2 è spesso ridotto a X * X con intensità ridotta producendo programmi in genere più veloci ma con errore diverso dal calcolo specificato dal programmatore originale. Quindi, @Kid, hai guardato lo standard IEEE per vedere quali limiti pone ai compilatori che utilizzano tale aritmetica? –
@RaymondChen: dopo aver applicato l'arrotondamento IEEE (su? Giù? Pari? Nessuno?), L'esempio b = c = 3 potrebbe non produrre esattamente lo stesso risultato in a? –