Christian Heimes added the comment: I propose that we add three singletons to the float implementation:
PyFloat_NaN PyFloat_Inf PyFloat_NegInf The singletons are returned from PyFloat_FromString() for "nan", "inf" and "-inf". The other PyFloat_ method must return the singletons, too. It's easy to check the signum, special and nan/inf status of an IEEE double with a struct. I've already started to work on a way to create nan, inf and -inf cross platform conform. Right now float("nan"), float("inf") and float("-inf") works on Linux but doesn't work on Windows. We could also add four methods to math: signum(float) -> 1/-1, finity(float) -> bool, infinite(float), nan(float) Here is my work in progress: #define Py_IEEE_DBL *(double*)&(ieee_double) #if defined(LITTLE_ENDIAN_IEEE_DOUBLE) && !defined(BIG_ENDIAN_IEEE_DOUBLE) typedef struct { unsigned int m4 : 16; unsigned int m3 : 16; unsigned int m2 : 16; unsigned int m1 : 4; unsigned int exp : 11; unsigned int sign : 1; } ieee_double; #define Py_IEEE_NAN Py_IEEE_DBL{0xffff, 0xffff, 0xffff, 0xf, 0x7ff, 0} #define Py_IEEE_INF Py_IEEE_DBL{0, 0, 0, 0, 0x7ff, 0} #define Py_IEEE_NEGINF Py_IEEE_DBL{0, 0, 0, 0, 0x7ff, 1} #elif !defined(LITTLE_ENDIAN_IEEE_DOUBLE) && defined(BIG_ENDIAN_IEEE_DOUBLE) typedef struct { unsigned int sign : 1; unsigned int exp : 11; unsigned int m1 : 4; unsigned int m2 : 16; unsigned int m3 : 16; unsigned int m4 : 16; } ieee_double; #define Py_IEEE_NAN Py_IEEE_DBL{0, 0x7ff, 0xf, 0xffff, 0xffff, 0xffff} #define Py_IEEE_INF Py_IEEE_DBL{0, 0x7ff, 0, 0, 0, 0} #define Py_IEEE_NEGINF Py_IEEE_DBL{1, 0x7ff, 0, 0, 0, 0} #else #error Unknown or no IEEE double implementation #endif __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1580> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com