Message58432
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 |
|
Date |
User |
Action |
Args |
2007-12-11 15:09:19 | christian.heimes | set | spambayes_score: 0.156557 -> 0.15655744 recipients:
+ christian.heimes, gvanrossum, tim.peters, nascheme, noam |
2007-12-11 15:09:19 | christian.heimes | set | spambayes_score: 0.156557 -> 0.156557 messageid: <1197385759.47.0.492981101912.issue1580@psf.upfronthosting.co.za> |
2007-12-11 15:09:19 | christian.heimes | link | issue1580 messages |
2007-12-11 15:09:18 | christian.heimes | create | |
|