summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2007-12-01 11:20:10 (GMT)
committerChristian Heimes <christian@cheimes.de>2007-12-01 11:20:10 (GMT)
commitdfdfaab1c54425113e07b623f7dc38f60762cee1 (patch)
tree0ad4a7143ebb830c8879cc7cc686ca67dbe00e13 /Objects
parent9f6d4ceb43583885cd090ff6adb87d31b3ac9c99 (diff)
downloadcpython-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.c47
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)
{