Chris Hogan added the comment:

Producing NaN by Py_HUGE_VAL / Py_HUGE_VAL as in the suggested patch is unsafe 
as it can generate a FP exception during runtime. Also aggresive compiler FP 
optimizations can eliminate this calculation on compile-time. For this reason, 
we've used constant referencing in our fix, which will work regardless of how 
-fp-model is set.

The problem is that the compiler is free to pre-compute the result as both 
values in 0*Inf are constants. An aggressively optimizing compiler could treat 
0 * x = 0 no matter what x is. So under aggressive floating point optimizations 
setting we could get a wrong value, and that is indeed what happens. 

Another problem is that 0 * Inf along with resulting in a QNaN value should 
raise an invalid floating point exception flag. If the result is pre-computed 
at compile time, then the user won’t see the flag (it is another question 
whether the user wanted the flag or not originally).

Our patch preserves both the value and the side effect, and leaves people free 
to build with the flags they want.

----------
nosy: +christopher.hogan
Added file: http://bugs.python.org/file40162/intel-nan-safe.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue21167>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to