On Fri, Jan 05, 2024 at 04:53:35PM +0100, David Brown via Gcc-help wrote: > >-ffast-math is allowed to introduce any rounding error it wants. Which > >can (in a loop for example) easily introduce unlimited rounding error, > >bigger than the actual result. And this is not just theoretical either. > > > > Normal maths mode can also lead to rounding errors that can build up - > the fact that rounding is carefully specified with IEEE does not mean > there are no errors (compared to the theoretical perfect real-number > calculation). That's not the point. A program can be perfectly fine, with bounded errors and all, and then -ffast-math will typically completely destroy all that, and replace all arithmetic by the equivalent of a dice roll. That has nothing to do with the fact that all floating point arithmetic is an approximation to real arithmetic (arithmetic on real numbers). The semantics of 754 (or any other standard followed) make it clear what the exact behaviour should be, and -ffast-math tells the compiler to ignore that and do whatever instead. You cannot have reasonable programs that way. > The rounding errors in -ffast-math will be very similar to those in IEEE > mode, for normal numbers. No, not at all. Look at what -fassociative-math does, for example. This can **and does** cause the loss of **all** bits of precision in certain programs. This is not theoretical. This is real. The -ffast-math flag can only reasonably be used with programs that did not want any specific results anyway. It would be even faster (and just as correct!) to always return 0. Segher