diff options
author | Christian Heimes <christian@cheimes.de> | 2007-12-01 11:20:10 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2007-12-01 11:20:10 (GMT) |
commit | dfdfaab1c54425113e07b623f7dc38f60762cee1 (patch) | |
tree | 0ad4a7143ebb830c8879cc7cc686ca67dbe00e13 /Objects | |
parent | 9f6d4ceb43583885cd090ff6adb87d31b3ac9c99 (diff) | |
download | cpython-dfdfaab1c54425113e07b623f7dc38f60762cee1.zip cpython-dfdfaab1c54425113e07b623f7dc38f60762cee1.tar.gz cpython-dfdfaab1c54425113e07b623f7dc38f60762cee1.tar.bz2 |
Feature #1534
Added PyFloat_GetMax(), PyFloat_GetMin() and PyFloat_GetInfo() to the float API.
Added a dictionary sys.float_info with information about the internal floating point type to the sys module.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/floatobject.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index bf9b172..c76956a 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -7,6 +7,7 @@ #include "Python.h" #include <ctype.h> +#include <float.h> #if !defined(__STDC__) extern double fmod(double, double); @@ -46,6 +47,52 @@ fill_free_list(void) return p + N_FLOATOBJECTS - 1; } +double +PyFloat_GetMax(void) +{ + return DBL_MAX; +} + +double +PyFloat_GetMin(void) +{ + return DBL_MIN; +} + +PyObject * +PyFloat_GetInfo(void) +{ + PyObject *d, *tmp; + +#define SET_FLOAT_CONST(d, key, const) \ + tmp = PyFloat_FromDouble(const); \ + if (tmp == NULL) return NULL; \ + if (PyDict_SetItemString(d, key, tmp)) return NULL; \ + Py_DECREF(tmp) +#define SET_INT_CONST(d, key, const) \ + tmp = PyInt_FromLong(const); \ + if (tmp == NULL) return NULL; \ + if (PyDict_SetItemString(d, key, tmp)) return NULL; \ + Py_DECREF(tmp) + + d = PyDict_New(); + + SET_FLOAT_CONST(d, "max", DBL_MAX); + SET_INT_CONST(d, "max_exp", DBL_MAX_EXP); + SET_INT_CONST(d, "max_10_exp", DBL_MAX_10_EXP); + SET_FLOAT_CONST(d, "min", DBL_MIN); + SET_INT_CONST(d, "min_exp", DBL_MIN_EXP); + SET_INT_CONST(d, "min_10_exp", DBL_MIN_10_EXP); + SET_INT_CONST(d, "dig", DBL_DIG); + SET_INT_CONST(d, "mant_dig", DBL_MANT_DIG); + SET_FLOAT_CONST(d, "epsilon", DBL_EPSILON); + SET_INT_CONST(d, "radix", FLT_RADIX); + SET_INT_CONST(d, "rounds", FLT_ROUNDS); + + return d; +} + + PyObject * PyFloat_FromDouble(double fval) { |