* Richard Biener: >> How much numerical code is compatible with that? For example, David >> Goldberg's What Every Computer Scientist Should Know About >> Floating-Point Arithmetic (revised) contains this sentence: >> >> | A language definition that does not require parentheses to be honored >> | is useless for floating-point calculations. >> >> <https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html> > > I suppose that applies to re-association not honoring parens. With C > you either have no re-association (fine) or re-association but globally, > at the expense of violating the standard. FP contraction is _not_ > about honoring parens, the 'error' introduced by is subtle.
But for contracted expressions, + *is* associative. Maybe this is not the most relevant part of the article for contractions, though. > Fortran for example allows re-association by default, but honors > parens. GCC can do this just fine. I think it's still a divergence from the model promoted by the article. For further problems see “Pitfalls in Computations on Extended-Based Systems”; that covers the matter of excess precision (which, as far as I understand, is very relevant to contractions). It quotes this code snippet: | if (1.0 + x .eq. 1.0) then The C11 standard does not define what “floating expressions” are (as far as I can see), so it's a bit unclear whether the whole thing can be contracted (assuming x is not a NaN). Thanks, Florian