bpo-46640: Py_NAN now uses the C99 NAN constant by vstinner · Pull Request #31134 · python/cpython · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Doc/whatsnew/3.11.rst
31 changes: 10 additions & 21 deletions Include/pymath.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,29 +51,18 @@
#endif

/* Py_NAN
* A value that evaluates to a NaN. On IEEE 754 platforms INF*0 or
* INF/INF works. Define Py_NO_NAN in pyconfig.h if your platform
* doesn't support NaNs.
* A value that evaluates to a quiet Not-a-Number (NaN).
* Define Py_NO_NAN in pyconfig.h if your platform doesn't support NaNs.
*/
#if !defined(Py_NAN) && !defined(Py_NO_NAN)
# if !defined(__INTEL_COMPILER)
# define Py_NAN (Py_HUGE_VAL * 0.)
# else /* __INTEL_COMPILER */
# if defined(ICC_NAN_STRICT)
#pragma float_control(push)
#pragma float_control(precise, on)
#pragma float_control(except, on)
Py_NO_INLINE static double __icc_nan()
{
return sqrt(-1.0);
}
#pragma float_control (pop)
# define Py_NAN __icc_nan()
# else /* ICC_NAN_RELAXED as default for Intel Compiler */
static const union { unsigned char buf[8]; double __icc_nan; } __nan_store = {0,0,0,0,0,0,0xf8,0x7f};
# define Py_NAN (__nan_store.__icc_nan)
# endif /* ICC_NAN_STRICT */
# endif /* __INTEL_COMPILER */
# if _Py__has_builtin(__builtin_nan)
// Built-in implementation of the ISO C99 function nan(): quiet NaN.
# define Py_NAN (__builtin_nan(""))
#else
// Use C99 NAN constant: quiet Not-A-Number.
// NAN is a float, Py_NAN is a double: cast to double.
# define Py_NAN ((double)NAN)
# endif
#endif

#endif /* Py_PYMATH_H */