But isn't it unacceptable in some cases? For instance, in this case (taken from Wikipedia):In particular, the compiler should be free to substitute "a*b+c" with "mulAccum a b c".
If x2 − y2 is evaluated as ((x×x) − y×y) using fused multiply–add, then the result may be negative even when x = y due to the first multiplication discarding low significance bits. This could then lead to an error if, for instance, the square root of the result is then evaluated.