summaryrefslogtreecommitdiffstats
path: root/Include/floatobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'Include/floatobject.h')
-rw-r--r--Include/floatobject.h29
1 files changed, 17 insertions, 12 deletions
diff --git a/Include/floatobject.h b/Include/floatobject.h
index 9a2066f..f695de8 100644
--- a/Include/floatobject.h
+++ b/Include/floatobject.h
@@ -55,13 +55,18 @@ PyAPI_FUNC(void) PyFloat_AsString(char*, PyFloatObject *v);
* routines produce a C double from such a string. The suffix (4 or 8)
* specifies the number of bytes in the string.
*
- * Excepting NaNs and infinities (which aren't handled correctly), the 4-
- * byte format is identical to the IEEE-754 single precision format, and
- * the 8-byte format to the IEEE-754 double precision format. On non-
- * IEEE platforms with more precision, or larger dynamic range, than
- * 754 supports, not all values can be packed; on non-IEEE platforms with
- * less precision, or smaller dynamic range, not all values can be
- * unpacked. What happens in such cases is partly accidental (alas).
+ * On platforms that appear to use (see _PyFloat_Init()) IEEE-754 formats
+ * these functions work by copying bits. On other platforms, the formats the
+ * 4- byte format is identical to the IEEE-754 single precision format, and
+ * the 8-byte format to the IEEE-754 double precision format, although the
+ * packing of INFs and NaNs (if such things exist on the platform) isn't
+ * handled correctly, and attempting to unpack a string containing an IEEE
+ * INF or NaN will raise an exception.
+ *
+ * On non-IEEE platforms with more precision, or larger dynamic range, than
+ * 754 supports, not all values can be packed; on non-IEEE platforms with less
+ * precision, or smaller dynamic range, not all values can be unpacked. What
+ * happens in such cases is partly accidental (alas).
*/
/* The pack routines write 4 or 8 bytes, starting at p. le is a bool
@@ -70,8 +75,9 @@ PyAPI_FUNC(void) PyFloat_AsString(char*, PyFloatObject *v);
* first, at p).
* Return value: 0 if all is OK, -1 if error (and an exception is
* set, most likely OverflowError).
- * Bug: What this does is undefined if x is a NaN or infinity.
- * Bug: -0.0 and +0.0 produce the same string.
+ * There are two problems on non-IEEE platforms:
+ * 1): What this does is undefined if x is a NaN or infinity.
+ * 2): -0.0 and +0.0 produce the same string.
*/
PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);
PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
@@ -81,9 +87,8 @@ PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
* last, at p+3 or p+7), false if big-endian (exponent first, at p).
* Return value: The unpacked double. On error, this is -1.0 and
* PyErr_Occurred() is true (and an exception is set, most likely
- * OverflowError).
- * Bug: What this does is undefined if the string represents a NaN or
- * infinity.
+ * OverflowError). Note that on a non-IEEE platform this will refuse
+ * to unpack a string that represents a NaN or infinity.
*/
PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);
PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);