diff options
author | Tim Peters <tim.peters@gmail.com> | 2004-09-23 19:11:32 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2004-09-23 19:11:32 (GMT) |
commit | 862f0593d8e8c7cd510b598296c73b25168d0472 (patch) | |
tree | b08e666ab49cab220687ec84959a37301dc076ae /Include | |
parent | 307fa78107c39ffda1eb4ad18201d25650354c4e (diff) | |
download | cpython-862f0593d8e8c7cd510b598296c73b25168d0472.zip cpython-862f0593d8e8c7cd510b598296c73b25168d0472.tar.gz cpython-862f0593d8e8c7cd510b598296c73b25168d0472.tar.bz2 |
Introduced a Py_IS_NAN macro, which probably works on the major platforms
today. pyconfig.h can override it if not, and can also override
Py_IS_INFINITY now. Py_IS_NAN and Py_IS_INFINITY are overridden now
for Microsoft compilers, using efficient MS-specific spellings.
Diffstat (limited to 'Include')
-rw-r--r-- | Include/pyport.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/Include/pyport.h b/Include/pyport.h index b20bc15..f71b9f4 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -219,14 +219,29 @@ extern "C" { #define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE) #endif +/* Py_IS_NAN(X) + * Return 1 if float or double arg is a NaN, else 0. + * Caution: + * X is evaluated more than once. + * This may not work on all platforms. Each platform has *some* + * way to spell this, though -- override in pyconfig.h if you have + * a platform where it doesn't work. + */ +#ifndef Py_IS_NAN +#define Py_IS_NAN(X) ((X) != (X)) +#endif + /* Py_IS_INFINITY(X) * Return 1 if float or double arg is an infinity, else 0. * Caution: * X is evaluated more than once. * This implementation may set the underflow flag if |X| is very small; * it really can't be implemented correctly (& easily) before C99. + * Override in pyconfig.h if you have a better spelling on your platform. */ +#ifndef Py_IS_INFINITY #define Py_IS_INFINITY(X) ((X) && (X)*0.5 == (X)) +#endif /* HUGE_VAL is supposed to expand to a positive double infinity. Python * uses Py_HUGE_VAL instead because some platforms are broken in this @@ -257,12 +272,12 @@ extern "C" { * Some platforms have better way to spell this, so expect some #ifdef'ery. * * OpenBSD uses 'isinf()' because a compiler bug on that platform causes - * the longer macro version to be mis-compiled. This isn't optimal, and + * the longer macro version to be mis-compiled. This isn't optimal, and * should be removed once a newer compiler is available on that platform. * The system that had the failure was running OpenBSD 3.2 on Intel, with * gcc 2.95.3. * - * According to Tim's checkin, the FreeBSD systems use isinf() to work + * According to Tim's checkin, the FreeBSD systems use isinf() to work * around a FPE bug on that platform. */ #if defined(__FreeBSD__) || defined(__OpenBSD__) |