Am 15. Juni 2018 19:10:01 MESZ schrieb Thomas Koenig <tkoe...@netcologne.de>:
>Am 14.06.2018 um 10:38 schrieb Janus Weil:
>>> Also, there are AFAIU other similar weirdness with impure functions.
>>> The
>>> standard allows a compiler to optimize
>>>
>>> y = f(x) + f(x)
>>>
>>> into
>>>
>>> y = 2 * f(x)
>>>
>>> even if f is impure, which is totally bonkers. Or even not call f at
>>> all,
>>> if the compiler determines that y is not needed.
>> Yes, that is the same kind of craziness. I hope gfortran does not
>actually do this?
>
>I would vote for this, but currently it is not done unless
>-faggressive-function-elimination is specified.
How about putting the short-circuiting of logical expressions with impure
functions under the same flag?
>By the way, there is a bit of strangeness about this. People use -Ofast
>knowing it will break all sorts of standards for numercial computation
Things are a bit different with -Ofast and -ffast-math. They are not enabled by
default, their effects are mentioned in the documentation, and they usually
don't change the results totally.
Short-circuiting is being done by default, is not properly documented and can
potentially have a huge impact on results (an impure function that is optimized
away can totally alter the program flow and all numerical results).
>but they balk at using an optimization that is explicitly permitted
>by the standard.
The standard allowing it is really not any consolation, if my results are
changed by this 'optimization' and I don't have any guarantee that different
compilers do the same thing with my code.
That's simply a bad idea, no matter how many official approval stamps it gets.
Cheers,
Janus