2 /* Float object implementation */
4 /* XXX There should be overflow checks here, but it's hard to check
5 for any kind of float exception without losing portability. */
15 #define MAX(x, y) ((x) < (y) ? (y) : (x))
16 #define MIN(x, y) ((x) < (y) ? (x) : (y))
19 /* OSF1 5.1 doesn't make this available with XOPEN_SOURCE_EXTENDED defined */
20 extern int finite(double);
23 /* Special free list -- see comments for same code in intobject.c. */
24 #define BLOCK_SIZE 1000 /* 1K less typical malloc overhead */
25 #define BHEAD_SIZE 8 /* Enough for a 64-bit pointer */
26 #define N_FLOATOBJECTS ((BLOCK_SIZE - BHEAD_SIZE) / sizeof(PyFloatObject))
29 struct _floatblock
*next
;
30 PyFloatObject objects
[N_FLOATOBJECTS
];
33 typedef struct _floatblock PyFloatBlock
;
35 static PyFloatBlock
*block_list
= NULL
;
36 static PyFloatObject
*free_list
= NULL
;
38 static PyFloatObject
*
42 /* XXX Float blocks escape the object heap. Use PyObject_MALLOC ??? */
43 p
= (PyFloatObject
*) PyMem_MALLOC(sizeof(PyFloatBlock
));
45 return (PyFloatObject
*) PyErr_NoMemory();
46 ((PyFloatBlock
*)p
)->next
= block_list
;
47 block_list
= (PyFloatBlock
*)p
;
48 p
= &((PyFloatBlock
*)p
)->objects
[0];
49 q
= p
+ N_FLOATOBJECTS
;
51 Py_TYPE(q
) = (struct _typeobject
*)(q
-1);
53 return p
+ N_FLOATOBJECTS
- 1;
68 static PyTypeObject FloatInfoType
= {0, 0, 0, 0, 0, 0};
70 PyDoc_STRVAR(floatinfo__doc__
,
73 A structseq holding information about the float type. It contains low level\n\
74 information about the precision and internal representation. Please study\n\
75 your system's :file:`float.h` for more information.");
77 static PyStructSequence_Field floatinfo_fields
[] = {
78 {"max", "DBL_MAX -- maximum representable finite float"},
79 {"max_exp", "DBL_MAX_EXP -- maximum int e such that radix**(e-1) "
81 {"max_10_exp", "DBL_MAX_10_EXP -- maximum int e such that 10**e "
83 {"min", "DBL_MIN -- Minimum positive normalizer float"},
84 {"min_exp", "DBL_MIN_EXP -- minimum int e such that radix**(e-1) "
85 "is a normalized float"},
86 {"min_10_exp", "DBL_MIN_10_EXP -- minimum int e such that 10**e is "
88 {"dig", "DBL_DIG -- digits"},
89 {"mant_dig", "DBL_MANT_DIG -- mantissa digits"},
90 {"epsilon", "DBL_EPSILON -- Difference between 1 and the next "
91 "representable float"},
92 {"radix", "FLT_RADIX -- radix of exponent"},
93 {"rounds", "FLT_ROUNDS -- addition rounds"},
97 static PyStructSequence_Desc floatinfo_desc
= {
98 "sys.float_info", /* name */
99 floatinfo__doc__
, /* doc */
100 floatinfo_fields
, /* fields */
105 PyFloat_GetInfo(void)
110 floatinfo
= PyStructSequence_New(&FloatInfoType
);
111 if (floatinfo
== NULL
) {
115 #define SetIntFlag(flag) \
116 PyStructSequence_SET_ITEM(floatinfo, pos++, PyInt_FromLong(flag))
117 #define SetDblFlag(flag) \
118 PyStructSequence_SET_ITEM(floatinfo, pos++, PyFloat_FromDouble(flag))
121 SetIntFlag(DBL_MAX_EXP
);
122 SetIntFlag(DBL_MAX_10_EXP
);
124 SetIntFlag(DBL_MIN_EXP
);
125 SetIntFlag(DBL_MIN_10_EXP
);
127 SetIntFlag(DBL_MANT_DIG
);
128 SetDblFlag(DBL_EPSILON
);
129 SetIntFlag(FLT_RADIX
);
130 SetIntFlag(FLT_ROUNDS
);
134 if (PyErr_Occurred()) {
142 PyFloat_FromDouble(double fval
)
144 register PyFloatObject
*op
;
145 if (free_list
== NULL
) {
146 if ((free_list
= fill_free_list()) == NULL
)
149 /* Inline PyObject_New */
151 free_list
= (PyFloatObject
*)Py_TYPE(op
);
152 PyObject_INIT(op
, &PyFloat_Type
);
154 return (PyObject
*) op
;
157 /**************************************************************************
158 RED_FLAG 22-Sep-2000 tim
159 PyFloat_FromString's pend argument is braindead. Prior to this RED_FLAG,
161 1. If v was a regular string, *pend was set to point to its terminating
162 null byte. That's useless (the caller can find that without any
163 help from this function!).
165 2. If v was a Unicode string, or an object convertible to a character
166 buffer, *pend was set to point into stack trash (the auto temp
167 vector holding the character buffer). That was downright dangerous.
169 Since we can't change the interface of a public API function, pend is
170 still supported but now *officially* useless: if pend is not NULL,
171 *pend is set to NULL.
172 **************************************************************************/
174 PyFloat_FromString(PyObject
*v
, char **pend
)
176 const char *s
, *last
, *end
;
178 char buffer
[256]; /* for errors */
179 #ifdef Py_USING_UNICODE
180 char *s_buffer
= NULL
;
183 PyObject
*result
= NULL
;
187 if (PyString_Check(v
)) {
188 s
= PyString_AS_STRING(v
);
189 len
= PyString_GET_SIZE(v
);
191 #ifdef Py_USING_UNICODE
192 else if (PyUnicode_Check(v
)) {
193 s_buffer
= (char *)PyMem_MALLOC(PyUnicode_GET_SIZE(v
)+1);
194 if (s_buffer
== NULL
)
195 return PyErr_NoMemory();
196 if (PyUnicode_EncodeDecimal(PyUnicode_AS_UNICODE(v
),
197 PyUnicode_GET_SIZE(v
),
205 else if (PyObject_AsCharBuffer(v
, &s
, &len
)) {
206 PyErr_SetString(PyExc_TypeError
,
207 "float() argument must be a string or a number");
212 while (Py_ISSPACE(*s
))
214 /* We don't care about overflow or underflow. If the platform
215 * supports them, infinities and signed zeroes (on underflow) are
217 x
= PyOS_string_to_double(s
, (char **)&end
, NULL
);
218 if (x
== -1.0 && PyErr_Occurred())
220 while (Py_ISSPACE(*end
))
223 result
= PyFloat_FromDouble(x
);
225 PyOS_snprintf(buffer
, sizeof(buffer
),
226 "invalid literal for float(): %.200s", s
);
227 PyErr_SetString(PyExc_ValueError
, buffer
);
232 #ifdef Py_USING_UNICODE
234 PyMem_FREE(s_buffer
);
240 float_dealloc(PyFloatObject
*op
)
242 if (PyFloat_CheckExact(op
)) {
243 Py_TYPE(op
) = (struct _typeobject
*)free_list
;
247 Py_TYPE(op
)->tp_free((PyObject
*)op
);
251 PyFloat_AsDouble(PyObject
*op
)
257 if (op
&& PyFloat_Check(op
))
258 return PyFloat_AS_DOUBLE((PyFloatObject
*) op
);
265 if ((nb
= Py_TYPE(op
)->tp_as_number
) == NULL
|| nb
->nb_float
== NULL
) {
266 PyErr_SetString(PyExc_TypeError
, "a float is required");
270 fo
= (PyFloatObject
*) (*nb
->nb_float
) (op
);
273 if (!PyFloat_Check(fo
)) {
274 PyErr_SetString(PyExc_TypeError
,
275 "nb_float should return float object");
279 val
= PyFloat_AS_DOUBLE(fo
);
287 /* Macro and helper that convert PyObject obj to a C double and store
288 the value in dbl; this replaces the functionality of the coercion
289 slot function. If conversion to double raises an exception, obj is
290 set to NULL, and the function invoking this macro returns NULL. If
291 obj is not of float, int or long type, Py_NotImplemented is incref'ed,
292 stored in obj, and returned from the function invoking this macro.
294 #define CONVERT_TO_DOUBLE(obj, dbl) \
295 if (PyFloat_Check(obj)) \
296 dbl = PyFloat_AS_DOUBLE(obj); \
297 else if (convert_to_double(&(obj), &(dbl)) < 0) \
301 convert_to_double(PyObject
**v
, double *dbl
)
303 register PyObject
*obj
= *v
;
305 if (PyInt_Check(obj
)) {
306 *dbl
= (double)PyInt_AS_LONG(obj
);
308 else if (PyLong_Check(obj
)) {
309 *dbl
= PyLong_AsDouble(obj
);
310 if (*dbl
== -1.0 && PyErr_Occurred()) {
316 Py_INCREF(Py_NotImplemented
);
317 *v
= Py_NotImplemented
;
323 /* XXX PyFloat_AsString and PyFloat_AsReprString are deprecated:
324 XXX they pass a char buffer without passing a length.
327 PyFloat_AsString(char *buf
, PyFloatObject
*v
)
329 char *tmp
= PyOS_double_to_string(v
->ob_fval
, 'g',
330 PyFloat_STR_PRECISION
,
331 Py_DTSF_ADD_DOT_0
, NULL
);
337 PyFloat_AsReprString(char *buf
, PyFloatObject
*v
)
339 char * tmp
= PyOS_double_to_string(v
->ob_fval
, 'r', 0,
340 Py_DTSF_ADD_DOT_0
, NULL
);
347 float_print(PyFloatObject
*v
, FILE *fp
, int flags
)
350 if (flags
& Py_PRINT_RAW
)
351 buf
= PyOS_double_to_string(v
->ob_fval
,
352 'g', PyFloat_STR_PRECISION
,
353 Py_DTSF_ADD_DOT_0
, NULL
);
355 buf
= PyOS_double_to_string(v
->ob_fval
,
356 'r', 0, Py_DTSF_ADD_DOT_0
, NULL
);
357 Py_BEGIN_ALLOW_THREADS
365 float_str_or_repr(PyFloatObject
*v
, int precision
, char format_code
)
368 char *buf
= PyOS_double_to_string(PyFloat_AS_DOUBLE(v
),
369 format_code
, precision
,
373 return PyErr_NoMemory();
374 result
= PyString_FromString(buf
);
380 float_repr(PyFloatObject
*v
)
382 return float_str_or_repr(v
, 0, 'r');
386 float_str(PyFloatObject
*v
)
388 return float_str_or_repr(v
, PyFloat_STR_PRECISION
, 'g');
391 /* Comparison is pretty much a nightmare. When comparing float to float,
392 * we do it as straightforwardly (and long-windedly) as conceivable, so
393 * that, e.g., Python x == y delivers the same result as the platform
394 * C x == y when x and/or y is a NaN.
395 * When mixing float with an integer type, there's no good *uniform* approach.
396 * Converting the double to an integer obviously doesn't work, since we
397 * may lose info from fractional bits. Converting the integer to a double
398 * also has two failure modes: (1) a long int may trigger overflow (too
399 * large to fit in the dynamic range of a C double); (2) even a C long may have
400 * more bits than fit in a C double (e.g., on a a 64-bit box long may have
401 * 63 bits of precision, but a C double probably has only 53), and then
402 * we can falsely claim equality when low-order integer bits are lost by
403 * coercion to double. So this part is painful too.
407 float_richcompare(PyObject
*v
, PyObject
*w
, int op
)
412 assert(PyFloat_Check(v
));
413 i
= PyFloat_AS_DOUBLE(v
);
415 /* Switch on the type of w. Set i and j to doubles to be compared,
416 * and op to the richcomp to use.
418 if (PyFloat_Check(w
))
419 j
= PyFloat_AS_DOUBLE(w
);
421 else if (!Py_IS_FINITE(i
)) {
422 if (PyInt_Check(w
) || PyLong_Check(w
))
423 /* If i is an infinity, its magnitude exceeds any
424 * finite integer, so it doesn't matter which int we
425 * compare i with. If i is a NaN, similarly.
432 else if (PyInt_Check(w
)) {
433 long jj
= PyInt_AS_LONG(w
);
434 /* In the worst realistic case I can imagine, C double is a
435 * Cray single with 48 bits of precision, and long has 64
439 unsigned long abs
= (unsigned long)(jj
< 0 ? -jj
: jj
);
441 /* Needs more than 48 bits. Make it take the
445 PyObject
*ww
= PyLong_FromLong(jj
);
449 result
= float_richcompare(v
, ww
, op
);
455 assert((long)j
== jj
);
458 else if (PyLong_Check(w
)) {
459 int vsign
= i
== 0.0 ? 0 : i
< 0.0 ? -1 : 1;
460 int wsign
= _PyLong_Sign(w
);
464 if (vsign
!= wsign
) {
465 /* Magnitudes are irrelevant -- the signs alone
466 * determine the outcome.
472 /* The signs are the same. */
473 /* Convert w to a double if it fits. In particular, 0 fits. */
474 nbits
= _PyLong_NumBits(w
);
475 if (nbits
== (size_t)-1 && PyErr_Occurred()) {
476 /* This long is so large that size_t isn't big enough
477 * to hold the # of bits. Replace with little doubles
478 * that give the same outcome -- w is so large that
479 * its magnitude must exceed the magnitude of any
489 j
= PyLong_AsDouble(w
);
490 /* It's impossible that <= 48 bits overflowed. */
491 assert(j
!= -1.0 || ! PyErr_Occurred());
494 assert(wsign
!= 0); /* else nbits was 0 */
495 assert(vsign
!= 0); /* if vsign were 0, then since wsign is
496 * not 0, we would have taken the
497 * vsign != wsign branch at the start */
498 /* We want to work with non-negative numbers. */
500 /* "Multiply both sides" by -1; this also swaps the
504 op
= _Py_SwappedOp
[op
];
507 (void) frexp(i
, &exponent
);
508 /* exponent is the # of bits in v before the radix point;
509 * we know that nbits (the # of bits in w) > 48 at this point
511 if (exponent
< 0 || (size_t)exponent
< nbits
) {
516 if ((size_t)exponent
> nbits
) {
521 /* v and w have the same number of bits before the radix
522 * point. Construct two longs that have the same comparison
528 PyObject
*result
= NULL
;
529 PyObject
*one
= NULL
;
534 ww
= PyNumber_Negative(w
);
541 fracpart
= modf(i
, &intpart
);
542 vv
= PyLong_FromDouble(intpart
);
546 if (fracpart
!= 0.0) {
547 /* Shift left, and or a 1 bit into vv
548 * to represent the lost fraction.
552 one
= PyInt_FromLong(1);
556 temp
= PyNumber_Lshift(ww
, one
);
562 temp
= PyNumber_Lshift(vv
, one
);
568 temp
= PyNumber_Or(vv
, one
);
575 r
= PyObject_RichCompareBool(vv
, ww
, op
);
578 result
= PyBool_FromLong(r
);
585 } /* else if (PyLong_Check(w)) */
587 else /* w isn't float, int, or long */
591 PyFPE_START_PROTECT("richcompare", return NULL
)
613 return PyBool_FromLong(r
);
616 Py_INCREF(Py_NotImplemented
);
617 return Py_NotImplemented
;
621 float_hash(PyFloatObject
*v
)
623 return _Py_HashDouble(v
->ob_fval
);
627 float_add(PyObject
*v
, PyObject
*w
)
630 CONVERT_TO_DOUBLE(v
, a
);
631 CONVERT_TO_DOUBLE(w
, b
);
632 PyFPE_START_PROTECT("add", return 0)
635 return PyFloat_FromDouble(a
);
639 float_sub(PyObject
*v
, PyObject
*w
)
642 CONVERT_TO_DOUBLE(v
, a
);
643 CONVERT_TO_DOUBLE(w
, b
);
644 PyFPE_START_PROTECT("subtract", return 0)
647 return PyFloat_FromDouble(a
);
651 float_mul(PyObject
*v
, PyObject
*w
)
654 CONVERT_TO_DOUBLE(v
, a
);
655 CONVERT_TO_DOUBLE(w
, b
);
656 PyFPE_START_PROTECT("multiply", return 0)
659 return PyFloat_FromDouble(a
);
663 float_div(PyObject
*v
, PyObject
*w
)
666 CONVERT_TO_DOUBLE(v
, a
);
667 CONVERT_TO_DOUBLE(w
, b
);
670 PyErr_SetString(PyExc_ZeroDivisionError
,
675 PyFPE_START_PROTECT("divide", return 0)
678 return PyFloat_FromDouble(a
);
682 float_classic_div(PyObject
*v
, PyObject
*w
)
685 CONVERT_TO_DOUBLE(v
, a
);
686 CONVERT_TO_DOUBLE(w
, b
);
687 if (Py_DivisionWarningFlag
>= 2 &&
688 PyErr_Warn(PyExc_DeprecationWarning
, "classic float division") < 0)
692 PyErr_SetString(PyExc_ZeroDivisionError
,
697 PyFPE_START_PROTECT("divide", return 0)
700 return PyFloat_FromDouble(a
);
704 float_rem(PyObject
*v
, PyObject
*w
)
708 CONVERT_TO_DOUBLE(v
, vx
);
709 CONVERT_TO_DOUBLE(w
, wx
);
712 PyErr_SetString(PyExc_ZeroDivisionError
,
717 PyFPE_START_PROTECT("modulo", return 0)
719 /* note: checking mod*wx < 0 is incorrect -- underflows to
720 0 if wx < sqrt(smallest nonzero double) */
721 if (mod
&& ((wx
< 0) != (mod
< 0))) {
724 PyFPE_END_PROTECT(mod
)
725 return PyFloat_FromDouble(mod
);
729 float_divmod(PyObject
*v
, PyObject
*w
)
732 double div
, mod
, floordiv
;
733 CONVERT_TO_DOUBLE(v
, vx
);
734 CONVERT_TO_DOUBLE(w
, wx
);
736 PyErr_SetString(PyExc_ZeroDivisionError
, "float divmod()");
739 PyFPE_START_PROTECT("divmod", return 0)
741 /* fmod is typically exact, so vx-mod is *mathematically* an
742 exact multiple of wx. But this is fp arithmetic, and fp
743 vx - mod is an approximation; the result is that div may
744 not be an exact integral value after the division, although
745 it will always be very close to one.
747 div
= (vx
- mod
) / wx
;
749 /* ensure the remainder has the same sign as the denominator */
750 if ((wx
< 0) != (mod
< 0)) {
756 /* the remainder is zero, and in the presence of signed zeroes
757 fmod returns different results across platforms; ensure
758 it has the same sign as the denominator; we'd like to do
759 "mod = wx * 0.0", but that may get optimized away */
760 mod
*= mod
; /* hide "mod = +0" from optimizer */
764 /* snap quotient to nearest integral value */
766 floordiv
= floor(div
);
767 if (div
- floordiv
> 0.5)
771 /* div is zero - get the same sign as the true quotient */
772 div
*= div
; /* hide "div = +0" from optimizers */
773 floordiv
= div
* vx
/ wx
; /* zero w/ sign of vx/wx */
775 PyFPE_END_PROTECT(floordiv
)
776 return Py_BuildValue("(dd)", floordiv
, mod
);
780 float_floor_div(PyObject
*v
, PyObject
*w
)
784 t
= float_divmod(v
, w
);
785 if (t
== NULL
|| t
== Py_NotImplemented
)
787 assert(PyTuple_CheckExact(t
));
788 r
= PyTuple_GET_ITEM(t
, 0);
794 /* determine whether x is an odd integer or not; assumes that
795 x is not an infinity or nan. */
796 #define DOUBLE_IS_ODD_INTEGER(x) (fmod(fabs(x), 2.0) == 1.0)
799 float_pow(PyObject
*v
, PyObject
*w
, PyObject
*z
)
802 int negate_result
= 0;
804 if ((PyObject
*)z
!= Py_None
) {
805 PyErr_SetString(PyExc_TypeError
, "pow() 3rd argument not "
806 "allowed unless all arguments are integers");
810 CONVERT_TO_DOUBLE(v
, iv
);
811 CONVERT_TO_DOUBLE(w
, iw
);
813 /* Sort out special cases here instead of relying on pow() */
814 if (iw
== 0) { /* v**0 is 1, even 0**0 */
815 return PyFloat_FromDouble(1.0);
817 if (Py_IS_NAN(iv
)) { /* nan**w = nan, unless w == 0 */
818 return PyFloat_FromDouble(iv
);
820 if (Py_IS_NAN(iw
)) { /* v**nan = nan, unless v == 1; 1**nan = 1 */
821 return PyFloat_FromDouble(iv
== 1.0 ? 1.0 : iw
);
823 if (Py_IS_INFINITY(iw
)) {
824 /* v**inf is: 0.0 if abs(v) < 1; 1.0 if abs(v) == 1; inf if
825 * abs(v) > 1 (including case where v infinite)
827 * v**-inf is: inf if abs(v) < 1; 1.0 if abs(v) == 1; 0.0 if
828 * abs(v) > 1 (including case where v infinite)
832 return PyFloat_FromDouble(1.0);
833 else if ((iw
> 0.0) == (iv
> 1.0))
834 return PyFloat_FromDouble(fabs(iw
)); /* return inf */
836 return PyFloat_FromDouble(0.0);
838 if (Py_IS_INFINITY(iv
)) {
839 /* (+-inf)**w is: inf for w positive, 0 for w negative; in
840 * both cases, we need to add the appropriate sign if w is
843 int iw_is_odd
= DOUBLE_IS_ODD_INTEGER(iw
);
845 return PyFloat_FromDouble(iw_is_odd
? iv
: fabs(iv
));
847 return PyFloat_FromDouble(iw_is_odd
?
848 copysign(0.0, iv
) : 0.0);
850 if (iv
== 0.0) { /* 0**w is: 0 for w positive, 1 for w zero
851 (already dealt with above), and an error
853 int iw_is_odd
= DOUBLE_IS_ODD_INTEGER(iw
);
855 PyErr_SetString(PyExc_ZeroDivisionError
,
856 "0.0 cannot be raised to a "
860 /* use correct sign if iw is odd */
861 return PyFloat_FromDouble(iw_is_odd
? iv
: 0.0);
865 /* Whether this is an error is a mess, and bumps into libm
866 * bugs so we have to figure it out ourselves.
868 if (iw
!= floor(iw
)) {
869 PyErr_SetString(PyExc_ValueError
, "negative number "
870 "cannot be raised to a fractional power");
873 /* iw is an exact integer, albeit perhaps a very large
874 * one. Replace iv by its absolute value and remember
875 * to negate the pow result if iw is odd.
878 negate_result
= DOUBLE_IS_ODD_INTEGER(iw
);
881 if (iv
== 1.0) { /* 1**w is 1, even 1**inf and 1**nan */
882 /* (-1) ** large_integer also ends up here. Here's an
883 * extract from the comments for the previous
884 * implementation explaining why this special case is
887 * -1 raised to an exact integer should never be exceptional.
888 * Alas, some libms (chiefly glibc as of early 2003) return
889 * NaN and set EDOM on pow(-1, large_int) if the int doesn't
890 * happen to be representable in a *C* integer. That's a
893 return PyFloat_FromDouble(negate_result
? -1.0 : 1.0);
896 /* Now iv and iw are finite, iw is nonzero, and iv is
897 * positive and not equal to 1.0. We finally allow
898 * the platform pow to step in and do the rest.
901 PyFPE_START_PROTECT("pow", return NULL
)
903 PyFPE_END_PROTECT(ix
)
904 Py_ADJUST_ERANGE1(ix
);
909 /* We don't expect any errno value other than ERANGE, but
910 * the range of libm bugs appears unbounded.
912 PyErr_SetFromErrno(errno
== ERANGE
? PyExc_OverflowError
:
916 return PyFloat_FromDouble(ix
);
919 #undef DOUBLE_IS_ODD_INTEGER
922 float_neg(PyFloatObject
*v
)
924 return PyFloat_FromDouble(-v
->ob_fval
);
928 float_abs(PyFloatObject
*v
)
930 return PyFloat_FromDouble(fabs(v
->ob_fval
));
934 float_nonzero(PyFloatObject
*v
)
936 return v
->ob_fval
!= 0.0;
940 float_coerce(PyObject
**pv
, PyObject
**pw
)
942 if (PyInt_Check(*pw
)) {
943 long x
= PyInt_AsLong(*pw
);
944 *pw
= PyFloat_FromDouble((double)x
);
948 else if (PyLong_Check(*pw
)) {
949 double x
= PyLong_AsDouble(*pw
);
950 if (x
== -1.0 && PyErr_Occurred())
952 *pw
= PyFloat_FromDouble(x
);
956 else if (PyFloat_Check(*pw
)) {
961 return 1; /* Can't do it */
965 float_is_integer(PyObject
*v
)
967 double x
= PyFloat_AsDouble(v
);
970 if (x
== -1.0 && PyErr_Occurred())
972 if (!Py_IS_FINITE(x
))
975 PyFPE_START_PROTECT("is_integer", return NULL
)
976 o
= (floor(x
) == x
) ? Py_True
: Py_False
;
979 PyErr_SetFromErrno(errno
== ERANGE
? PyExc_OverflowError
:
989 float_is_inf(PyObject
*v
)
991 double x
= PyFloat_AsDouble(v
);
992 if (x
== -1.0 && PyErr_Occurred())
994 return PyBool_FromLong((long)Py_IS_INFINITY(x
));
998 float_is_nan(PyObject
*v
)
1000 double x
= PyFloat_AsDouble(v
);
1001 if (x
== -1.0 && PyErr_Occurred())
1003 return PyBool_FromLong((long)Py_IS_NAN(x
));
1007 float_is_finite(PyObject
*v
)
1009 double x
= PyFloat_AsDouble(v
);
1010 if (x
== -1.0 && PyErr_Occurred())
1012 return PyBool_FromLong((long)Py_IS_FINITE(x
));
1017 float_trunc(PyObject
*v
)
1019 double x
= PyFloat_AsDouble(v
);
1020 double wholepart
; /* integral portion of x, rounded toward 0 */
1022 (void)modf(x
, &wholepart
);
1023 /* Try to get out cheap if this fits in a Python int. The attempt
1024 * to cast to long must be protected, as C doesn't define what
1025 * happens if the double is too big to fit in a long. Some rare
1026 * systems raise an exception then (RISCOS was mentioned as one,
1027 * and someone using a non-default option on Sun also bumped into
1028 * that). Note that checking for >= and <= LONG_{MIN,MAX} would
1029 * still be vulnerable: if a long has more bits of precision than
1030 * a double, casting MIN/MAX to double may yield an approximation,
1031 * and if that's rounded up, then, e.g., wholepart=LONG_MAX+1 would
1032 * yield true from the C expression wholepart<=LONG_MAX, despite
1033 * that wholepart is actually greater than LONG_MAX.
1035 if (LONG_MIN
< wholepart
&& wholepart
< LONG_MAX
) {
1036 const long aslong
= (long)wholepart
;
1037 return PyInt_FromLong(aslong
);
1039 return PyLong_FromDouble(wholepart
);
1043 float_long(PyObject
*v
)
1045 double x
= PyFloat_AsDouble(v
);
1046 return PyLong_FromDouble(x
);
1049 /* _Py_double_round: rounds a finite nonzero double to the closest multiple of
1050 10**-ndigits; here ndigits is within reasonable bounds (typically, -308 <=
1051 ndigits <= 323). Returns a Python float, or sets a Python error and
1052 returns NULL on failure (OverflowError and memory errors are possible). */
1054 #ifndef PY_NO_SHORT_FLOAT_REPR
1055 /* version of _Py_double_round that uses the correctly-rounded string<->double
1056 conversions from Python/dtoa.c */
1058 /* FIVE_POW_LIMIT is the largest k such that 5**k is exactly representable as
1059 a double. Since we're using the code in Python/dtoa.c, it should be safe
1060 to assume that C doubles are IEEE 754 binary64 format. To be on the safe
1061 side, we check this. */
1062 #if DBL_MANT_DIG == 53
1063 #define FIVE_POW_LIMIT 22
1065 #error "C doubles do not appear to be IEEE 754 binary64 format"
1069 _Py_double_round(double x
, int ndigits
) {
1072 Py_ssize_t buflen
, mybuflen
=100;
1073 char *buf
, *buf_end
, shortbuf
[100], *mybuf
=shortbuf
;
1074 int decpt
, sign
, val
, halfway_case
;
1075 PyObject
*result
= NULL
;
1077 /* The basic idea is very simple: convert and round the double to a
1078 decimal string using _Py_dg_dtoa, then convert that decimal string
1079 back to a double with _Py_dg_strtod. There's one minor difficulty:
1080 Python 2.x expects round to do round-half-away-from-zero, while
1081 _Py_dg_dtoa does round-half-to-even. So we need some way to detect
1082 and correct the halfway cases.
1084 Detection: a halfway value has the form k * 0.5 * 10**-ndigits for
1085 some odd integer k. Or in other words, a rational number x is
1086 exactly halfway between two multiples of 10**-ndigits if its
1087 2-valuation is exactly -ndigits-1 and its 5-valuation is at least
1088 -ndigits. For ndigits >= 0 the latter condition is automatically
1089 satisfied for a binary float x, since any such float has
1090 nonnegative 5-valuation. For 0 > ndigits >= -22, x needs to be an
1091 integral multiple of 5**-ndigits; we can check this using fmod.
1092 For -22 > ndigits, there are no halfway cases: 5**23 takes 54 bits
1093 to represent exactly, so any odd multiple of 0.5 * 10**n for n >=
1094 23 takes at least 54 bits of precision to represent exactly.
1096 Correction: a simple strategy for dealing with halfway cases is to
1097 (for the halfway cases only) call _Py_dg_dtoa with an argument of
1098 ndigits+1 instead of ndigits (thus doing an exact conversion to
1099 decimal), round the resulting string manually, and then convert
1100 back using _Py_dg_strtod.
1103 /* nans, infinities and zeros should have already been dealt
1104 with by the caller (in this case, builtin_round) */
1105 assert(Py_IS_FINITE(x
) && x
!= 0.0);
1107 /* find 2-valuation val of x */
1109 while (m
!= floor(m
)) {
1114 /* determine whether this is a halfway case */
1115 if (val
== -ndigits
-1) {
1118 else if (ndigits
>= -FIVE_POW_LIMIT
) {
1119 double five_pow
= 1.0;
1121 for (i
=0; i
< -ndigits
; i
++)
1123 halfway_case
= fmod(x
, five_pow
) == 0.0;
1131 /* round to a decimal string; use an extra place for halfway case */
1132 buf
= _Py_dg_dtoa(x
, 3, ndigits
+halfway_case
, &decpt
, &sign
, &buf_end
);
1137 buflen
= buf_end
- buf
;
1139 /* in halfway case, do the round-half-away-from-zero manually */
1142 /* sanity check: _Py_dg_dtoa should not have stripped
1143 any zeros from the result: there should be exactly
1144 ndigits+1 places following the decimal point, and
1145 the last digit in the buffer should be a '5'.*/
1146 assert(buflen
- decpt
== ndigits
+1);
1147 assert(buf
[buflen
-1] == '5');
1149 /* increment and shift right at the same time. */
1152 for (i
=buflen
-1; i
-- > 0;) {
1153 carry
+= buf
[i
] - '0';
1154 buf
[i
+1] = carry
% 10 + '0';
1157 buf
[0] = carry
+ '0';
1160 /* Get new buffer if shortbuf is too small. Space needed <= buf_end -
1161 buf + 8: (1 extra for '0', 1 for sign, 5 for exp, 1 for '\0'). */
1162 if (buflen
+ 8 > mybuflen
) {
1163 mybuflen
= buflen
+8;
1164 mybuf
= (char *)PyMem_Malloc(mybuflen
);
1165 if (mybuf
== NULL
) {
1170 /* copy buf to mybuf, adding exponent, sign and leading 0 */
1171 PyOS_snprintf(mybuf
, mybuflen
, "%s0%se%d", (sign
? "-" : ""),
1172 buf
, decpt
- (int)buflen
);
1174 /* and convert the resulting string back to a double */
1176 rounded
= _Py_dg_strtod(mybuf
, NULL
);
1177 if (errno
== ERANGE
&& fabs(rounded
) >= 1.)
1178 PyErr_SetString(PyExc_OverflowError
,
1179 "rounded value too large to represent");
1181 result
= PyFloat_FromDouble(rounded
);
1183 /* done computing value; now clean up */
1184 if (mybuf
!= shortbuf
)
1187 _Py_dg_freedtoa(buf
);
1191 #undef FIVE_POW_LIMIT
1193 #else /* PY_NO_SHORT_FLOAT_REPR */
1195 /* fallback version, to be used when correctly rounded binary<->decimal
1196 conversions aren't available */
1199 _Py_double_round(double x
, int ndigits
) {
1200 double pow1
, pow2
, y
, z
;
1203 /* pow1 and pow2 are each safe from overflow, but
1204 pow1*pow2 ~= pow(10.0, ndigits) might overflow */
1205 pow1
= pow(10.0, (double)(ndigits
-22));
1209 pow1
= pow(10.0, (double)ndigits
);
1213 /* if y overflows, then rounded value is exactly x */
1214 if (!Py_IS_FINITE(y
))
1215 return PyFloat_FromDouble(x
);
1218 pow1
= pow(10.0, (double)-ndigits
);
1219 pow2
= 1.0; /* unused; silences a gcc compiler warning */
1224 if (fabs(y
-z
) == 0.5)
1225 /* halfway between two integers; use round-away-from-zero */
1226 z
= y
+ copysign(0.5, y
);
1229 z
= (z
/ pow2
) / pow1
;
1233 /* if computation resulted in overflow, raise OverflowError */
1234 if (!Py_IS_FINITE(z
)) {
1235 PyErr_SetString(PyExc_OverflowError
,
1236 "overflow occurred during round");
1240 return PyFloat_FromDouble(z
);
1243 #endif /* PY_NO_SHORT_FLOAT_REPR */
1246 float_float(PyObject
*v
)
1248 if (PyFloat_CheckExact(v
))
1251 v
= PyFloat_FromDouble(((PyFloatObject
*)v
)->ob_fval
);
1255 /* turn ASCII hex characters into integer values and vice versa */
1258 char_from_hex(int x
)
1260 assert(0 <= x
&& x
< 16);
1261 return "0123456789abcdef"[x
];
1265 hex_from_char(char c
) {
1329 /* convert a float to a hexadecimal string */
1331 /* TOHEX_NBITS is DBL_MANT_DIG rounded up to the next integer
1332 of the form 4k+1. */
1333 #define TOHEX_NBITS DBL_MANT_DIG + 3 - (DBL_MANT_DIG+2)%4
1336 float_hex(PyObject
*v
)
1339 int e
, shift
, i
, si
, esign
;
1340 /* Space for 1+(TOHEX_NBITS-1)/4 digits, a decimal point, and the
1341 trailing NUL byte. */
1342 char s
[(TOHEX_NBITS
-1)/4+3];
1344 CONVERT_TO_DOUBLE(v
, x
);
1346 if (Py_IS_NAN(x
) || Py_IS_INFINITY(x
))
1347 return float_str((PyFloatObject
*)v
);
1350 if(copysign(1.0, x
) == -1.0)
1351 return PyString_FromString("-0x0.0p+0");
1353 return PyString_FromString("0x0.0p+0");
1356 m
= frexp(fabs(x
), &e
);
1357 shift
= 1 - MAX(DBL_MIN_EXP
- e
, 0);
1358 m
= ldexp(m
, shift
);
1362 s
[si
] = char_from_hex((int)m
);
1367 for (i
=0; i
< (TOHEX_NBITS
-1)/4; i
++) {
1369 s
[si
] = char_from_hex((int)m
);
1383 return PyString_FromFormat("-0x%sp%c%d", s
, esign
, e
);
1385 return PyString_FromFormat("0x%sp%c%d", s
, esign
, e
);
1388 PyDoc_STRVAR(float_hex_doc
,
1389 "float.hex() -> string\n\
1391 Return a hexadecimal representation of a floating-point number.\n\
1393 '-0x1.999999999999ap-4'\n\
1394 >>> 3.14159.hex()\n\
1395 '0x1.921f9f01b866ep+1'");
1397 /* Case-insensitive locale-independent string match used for nan and inf
1398 detection. t should be lower-case and null-terminated. Return a nonzero
1399 result if the first strlen(t) characters of s match t and 0 otherwise. */
1402 case_insensitive_match(const char *s
, const char *t
)
1404 while(*t
&& Py_TOLOWER(*s
) == *t
) {
1411 /* Convert a hexadecimal string to a float. */
1414 float_fromhex(PyObject
*cls
, PyObject
*arg
)
1416 PyObject
*result_as_float
, *result
;
1418 long exp
, top_exp
, lsb
, key_digit
;
1419 char *s
, *coeff_start
, *s_store
, *coeff_end
, *exp_start
, *s_end
;
1420 int half_eps
, digit
, round_up
, sign
=1;
1421 Py_ssize_t length
, ndigits
, fdigits
, i
;
1424 * For the sake of simplicity and correctness, we impose an artificial
1425 * limit on ndigits, the total number of hex digits in the coefficient
1426 * The limit is chosen to ensure that, writing exp for the exponent,
1428 * (1) if exp > LONG_MAX/2 then the value of the hex string is
1429 * guaranteed to overflow (provided it's nonzero)
1431 * (2) if exp < LONG_MIN/2 then the value of the hex string is
1432 * guaranteed to underflow to 0.
1434 * (3) if LONG_MIN/2 <= exp <= LONG_MAX/2 then there's no danger of
1435 * overflow in the calculation of exp and top_exp below.
1437 * More specifically, ndigits is assumed to satisfy the following
1440 * 4*ndigits <= DBL_MIN_EXP - DBL_MANT_DIG - LONG_MIN/2
1441 * 4*ndigits <= LONG_MAX/2 + 1 - DBL_MAX_EXP
1443 * If either of these inequalities is not satisfied, a ValueError is
1444 * raised. Otherwise, write x for the value of the hex string, and
1445 * assume x is nonzero. Then
1447 * 2**(exp-4*ndigits) <= |x| < 2**(exp+4*ndigits).
1449 * Now if exp > LONG_MAX/2 then:
1451 * exp - 4*ndigits >= LONG_MAX/2 + 1 - (LONG_MAX/2 + 1 - DBL_MAX_EXP)
1454 * so |x| >= 2**DBL_MAX_EXP, which is too large to be stored in C
1455 * double, so overflows. If exp < LONG_MIN/2, then
1457 * exp + 4*ndigits <= LONG_MIN/2 - 1 + (
1458 * DBL_MIN_EXP - DBL_MANT_DIG - LONG_MIN/2)
1459 * = DBL_MIN_EXP - DBL_MANT_DIG - 1
1461 * and so |x| < 2**(DBL_MIN_EXP-DBL_MANT_DIG-1), hence underflows to 0
1462 * when converted to a C double.
1464 * It's easy to show that if LONG_MIN/2 <= exp <= LONG_MAX/2 then both
1465 * exp+4*ndigits and exp-4*ndigits are within the range of a long.
1468 if (PyString_AsStringAndSize(arg
, &s
, &length
))
1472 /********************
1473 * Parse the string *
1474 ********************/
1476 /* leading whitespace and optional sign */
1477 while (Py_ISSPACE(*s
))
1486 /* infinities and nans */
1487 if (*s
== 'i' || *s
== 'I') {
1488 if (!case_insensitive_match(s
+1, "nf"))
1492 if (case_insensitive_match(s
, "inity"))
1496 if (*s
== 'n' || *s
== 'N') {
1497 if (!case_insensitive_match(s
+1, "an"))
1508 if (*s
== 'x' || *s
== 'X')
1514 /* coefficient: <integer> [. <fraction>] */
1516 while (hex_from_char(*s
) >= 0)
1521 while (hex_from_char(*s
) >= 0)
1528 /* ndigits = total # of hex digits; fdigits = # after point */
1529 ndigits
= coeff_end
- coeff_start
;
1530 fdigits
= coeff_end
- s_store
;
1533 if (ndigits
> MIN(DBL_MIN_EXP
- DBL_MANT_DIG
- LONG_MIN
/2,
1534 LONG_MAX
/2 + 1 - DBL_MAX_EXP
)/4)
1535 goto insane_length_error
;
1537 /* [p <exponent>] */
1538 if (*s
== 'p' || *s
== 'P') {
1541 if (*s
== '-' || *s
== '+')
1543 if (!('0' <= *s
&& *s
<= '9'))
1546 while ('0' <= *s
&& *s
<= '9')
1548 exp
= strtol(exp_start
, NULL
, 10);
1553 /* for 0 <= j < ndigits, HEX_DIGIT(j) gives the jth most significant digit */
1554 #define HEX_DIGIT(j) hex_from_char(*((j) < fdigits ? \
1558 /*******************************************
1559 * Compute rounded value of the hex string *
1560 *******************************************/
1562 /* Discard leading zeros, and catch extreme overflow and underflow */
1563 while (ndigits
> 0 && HEX_DIGIT(ndigits
-1) == 0)
1565 if (ndigits
== 0 || exp
< LONG_MIN
/2) {
1569 if (exp
> LONG_MAX
/2)
1570 goto overflow_error
;
1572 /* Adjust exponent for fractional part. */
1573 exp
= exp
- 4*((long)fdigits
);
1575 /* top_exp = 1 more than exponent of most sig. bit of coefficient */
1576 top_exp
= exp
+ 4*((long)ndigits
- 1);
1577 for (digit
= HEX_DIGIT(ndigits
-1); digit
!= 0; digit
/= 2)
1580 /* catch almost all nonextreme cases of overflow and underflow here */
1581 if (top_exp
< DBL_MIN_EXP
- DBL_MANT_DIG
) {
1585 if (top_exp
> DBL_MAX_EXP
)
1586 goto overflow_error
;
1588 /* lsb = exponent of least significant bit of the *rounded* value.
1589 This is top_exp - DBL_MANT_DIG unless result is subnormal. */
1590 lsb
= MAX(top_exp
, (long)DBL_MIN_EXP
) - DBL_MANT_DIG
;
1594 /* no rounding required */
1595 for (i
= ndigits
-1; i
>= 0; i
--)
1596 x
= 16.0*x
+ HEX_DIGIT(i
);
1597 x
= ldexp(x
, (int)(exp
));
1600 /* rounding required. key_digit is the index of the hex digit
1601 containing the first bit to be rounded away. */
1602 half_eps
= 1 << (int)((lsb
- exp
- 1) % 4);
1603 key_digit
= (lsb
- exp
- 1) / 4;
1604 for (i
= ndigits
-1; i
> key_digit
; i
--)
1605 x
= 16.0*x
+ HEX_DIGIT(i
);
1606 digit
= HEX_DIGIT(key_digit
);
1607 x
= 16.0*x
+ (double)(digit
& (16-2*half_eps
));
1609 /* round-half-even: round up if bit lsb-1 is 1 and at least one of
1610 bits lsb, lsb-2, lsb-3, lsb-4, ... is 1. */
1611 if ((digit
& half_eps
) != 0) {
1613 if ((digit
& (3*half_eps
-1)) != 0 ||
1614 (half_eps
== 8 && (HEX_DIGIT(key_digit
+1) & 1) != 0))
1617 for (i
= key_digit
-1; i
>= 0; i
--)
1618 if (HEX_DIGIT(i
) != 0) {
1622 if (round_up
== 1) {
1624 if (top_exp
== DBL_MAX_EXP
&&
1625 x
== ldexp((double)(2*half_eps
), DBL_MANT_DIG
))
1626 /* overflow corner case: pre-rounded value <
1627 2**DBL_MAX_EXP; rounded=2**DBL_MAX_EXP. */
1628 goto overflow_error
;
1631 x
= ldexp(x
, (int)(exp
+4*key_digit
));
1634 /* optional trailing whitespace leading to the end of the string */
1635 while (Py_ISSPACE(*s
))
1639 result_as_float
= Py_BuildValue("(d)", sign
* x
);
1640 if (result_as_float
== NULL
)
1642 result
= PyObject_CallObject(cls
, result_as_float
);
1643 Py_DECREF(result_as_float
);
1647 PyErr_SetString(PyExc_OverflowError
,
1648 "hexadecimal value too large to represent as a float");
1652 PyErr_SetString(PyExc_ValueError
,
1653 "invalid hexadecimal floating-point string");
1656 insane_length_error
:
1657 PyErr_SetString(PyExc_ValueError
,
1658 "hexadecimal string too long to convert");
1662 PyDoc_STRVAR(float_fromhex_doc
,
1663 "float.fromhex(string) -> float\n\
1665 Create a floating-point number from a hexadecimal string.\n\
1666 >>> float.fromhex('0x1.ffffp10')\n\
1668 >>> float.fromhex('-0x1p-1074')\n\
1669 -4.9406564584124654e-324");
1673 float_as_integer_ratio(PyObject
*v
, PyObject
*unused
)
1681 PyObject
*py_exponent
= NULL
;
1682 PyObject
*numerator
= NULL
;
1683 PyObject
*denominator
= NULL
;
1684 PyObject
*result_pair
= NULL
;
1685 PyNumberMethods
*long_methods
= PyLong_Type
.tp_as_number
;
1687 #define INPLACE_UPDATE(obj, call) \
1692 CONVERT_TO_DOUBLE(v, self);
1694 if (Py_IS_INFINITY(self
)) {
1695 PyErr_SetString(PyExc_OverflowError
,
1696 "Cannot pass infinity to float.as_integer_ratio.");
1700 if (Py_IS_NAN(self
)) {
1701 PyErr_SetString(PyExc_ValueError
,
1702 "Cannot pass NaN to float.as_integer_ratio.");
1707 PyFPE_START_PROTECT("as_integer_ratio", goto error
);
1708 float_part
= frexp(self
, &exponent
); /* self == float_part * 2**exponent exactly */
1709 PyFPE_END_PROTECT(float_part
);
1711 for (i
=0; i
<300 && float_part
!= floor(float_part
) ; i
++) {
1715 /* self == float_part * 2**exponent exactly and float_part is integral.
1716 If FLT_RADIX != 2, the 300 steps may leave a tiny fractional part
1717 to be truncated by PyLong_FromDouble(). */
1719 numerator
= PyLong_FromDouble(float_part
);
1720 if (numerator
== NULL
) goto error
;
1722 /* fold in 2**exponent */
1723 denominator
= PyLong_FromLong(1);
1724 py_exponent
= PyLong_FromLong(labs((long)exponent
));
1725 if (py_exponent
== NULL
) goto error
;
1726 INPLACE_UPDATE(py_exponent
,
1727 long_methods
->nb_lshift(denominator
, py_exponent
));
1728 if (py_exponent
== NULL
) goto error
;
1730 INPLACE_UPDATE(numerator
,
1731 long_methods
->nb_multiply(numerator
, py_exponent
));
1732 if (numerator
== NULL
) goto error
;
1735 Py_DECREF(denominator
);
1736 denominator
= py_exponent
;
1740 /* Returns ints instead of longs where possible */
1741 INPLACE_UPDATE(numerator
, PyNumber_Int(numerator
));
1742 if (numerator
== NULL
) goto error
;
1743 INPLACE_UPDATE(denominator
, PyNumber_Int(denominator
));
1744 if (denominator
== NULL
) goto error
;
1746 result_pair
= PyTuple_Pack(2, numerator
, denominator
);
1748 #undef INPLACE_UPDATE
1750 Py_XDECREF(py_exponent
);
1751 Py_XDECREF(denominator
);
1752 Py_XDECREF(numerator
);
1756 PyDoc_STRVAR(float_as_integer_ratio_doc
,
1757 "float.as_integer_ratio() -> (int, int)\n"
1759 "Returns a pair of integers, whose ratio is exactly equal to the original\n"
1760 "float and with a positive denominator.\n"
1761 "Raises OverflowError on infinities and a ValueError on NaNs.\n"
1763 ">>> (10.0).as_integer_ratio()\n"
1765 ">>> (0.0).as_integer_ratio()\n"
1767 ">>> (-.25).as_integer_ratio()\n"
1772 float_subtype_new(PyTypeObject
*type
, PyObject
*args
, PyObject
*kwds
);
1775 float_new(PyTypeObject
*type
, PyObject
*args
, PyObject
*kwds
)
1777 PyObject
*x
= Py_False
; /* Integer zero */
1778 static char *kwlist
[] = {"x", 0};
1780 if (type
!= &PyFloat_Type
)
1781 return float_subtype_new(type
, args
, kwds
); /* Wimp out */
1782 if (!PyArg_ParseTupleAndKeywords(args
, kwds
, "|O:float", kwlist
, &x
))
1784 /* If it's a string, but not a string subclass, use
1785 PyFloat_FromString. */
1786 if (PyString_CheckExact(x
))
1787 return PyFloat_FromString(x
, NULL
);
1788 return PyNumber_Float(x
);
1791 /* Wimpy, slow approach to tp_new calls for subtypes of float:
1792 first create a regular float from whatever arguments we got,
1793 then allocate a subtype instance and initialize its ob_fval
1794 from the regular float. The regular float is then thrown away.
1797 float_subtype_new(PyTypeObject
*type
, PyObject
*args
, PyObject
*kwds
)
1799 PyObject
*tmp
, *newobj
;
1801 assert(PyType_IsSubtype(type
, &PyFloat_Type
));
1802 tmp
= float_new(&PyFloat_Type
, args
, kwds
);
1805 assert(PyFloat_CheckExact(tmp
));
1806 newobj
= type
->tp_alloc(type
, 0);
1807 if (newobj
== NULL
) {
1811 ((PyFloatObject
*)newobj
)->ob_fval
= ((PyFloatObject
*)tmp
)->ob_fval
;
1817 float_getnewargs(PyFloatObject
*v
)
1819 return Py_BuildValue("(d)", v
->ob_fval
);
1822 /* this is for the benefit of the pack/unpack routines below */
1825 unknown_format
, ieee_big_endian_format
, ieee_little_endian_format
1826 } float_format_type
;
1828 static float_format_type double_format
, float_format
;
1829 static float_format_type detected_double_format
, detected_float_format
;
1832 float_getformat(PyTypeObject
*v
, PyObject
* arg
)
1835 float_format_type r
;
1837 if (!PyString_Check(arg
)) {
1838 PyErr_Format(PyExc_TypeError
,
1839 "__getformat__() argument must be string, not %.500s",
1840 Py_TYPE(arg
)->tp_name
);
1843 s
= PyString_AS_STRING(arg
);
1844 if (strcmp(s
, "double") == 0) {
1847 else if (strcmp(s
, "float") == 0) {
1851 PyErr_SetString(PyExc_ValueError
,
1852 "__getformat__() argument 1 must be "
1853 "'double' or 'float'");
1858 case unknown_format
:
1859 return PyString_FromString("unknown");
1860 case ieee_little_endian_format
:
1861 return PyString_FromString("IEEE, little-endian");
1862 case ieee_big_endian_format
:
1863 return PyString_FromString("IEEE, big-endian");
1865 Py_FatalError("insane float_format or double_format");
1870 PyDoc_STRVAR(float_getformat_doc
,
1871 "float.__getformat__(typestr) -> string\n"
1873 "You probably don't want to use this function. It exists mainly to be\n"
1874 "used in Python's test suite.\n"
1876 "typestr must be 'double' or 'float'. This function returns whichever of\n"
1877 "'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the\n"
1878 "format of floating point numbers used by the C type named by typestr.");
1881 float_setformat(PyTypeObject
*v
, PyObject
* args
)
1885 float_format_type f
;
1886 float_format_type detected
;
1887 float_format_type
*p
;
1889 if (!PyArg_ParseTuple(args
, "ss:__setformat__", &typestr
, &format
))
1892 if (strcmp(typestr
, "double") == 0) {
1894 detected
= detected_double_format
;
1896 else if (strcmp(typestr
, "float") == 0) {
1898 detected
= detected_float_format
;
1901 PyErr_SetString(PyExc_ValueError
,
1902 "__setformat__() argument 1 must "
1903 "be 'double' or 'float'");
1907 if (strcmp(format
, "unknown") == 0) {
1910 else if (strcmp(format
, "IEEE, little-endian") == 0) {
1911 f
= ieee_little_endian_format
;
1913 else if (strcmp(format
, "IEEE, big-endian") == 0) {
1914 f
= ieee_big_endian_format
;
1917 PyErr_SetString(PyExc_ValueError
,
1918 "__setformat__() argument 2 must be "
1919 "'unknown', 'IEEE, little-endian' or "
1920 "'IEEE, big-endian'");
1925 if (f
!= unknown_format
&& f
!= detected
) {
1926 PyErr_Format(PyExc_ValueError
,
1927 "can only set %s format to 'unknown' or the "
1928 "detected platform value", typestr
);
1936 PyDoc_STRVAR(float_setformat_doc
,
1937 "float.__setformat__(typestr, fmt) -> None\n"
1939 "You probably don't want to use this function. It exists mainly to be\n"
1940 "used in Python's test suite.\n"
1942 "typestr must be 'double' or 'float'. fmt must be one of 'unknown',\n"
1943 "'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be\n"
1944 "one of the latter two if it appears to match the underlying C reality.\n"
1946 "Overrides the automatic determination of C-level floating point type.\n"
1947 "This affects how floats are converted to and from binary strings.");
1950 float_getzero(PyObject
*v
, void *closure
)
1952 return PyFloat_FromDouble(0.0);
1956 float__format__(PyObject
*self
, PyObject
*args
)
1958 PyObject
*format_spec
;
1960 if (!PyArg_ParseTuple(args
, "O:__format__", &format_spec
))
1962 if (PyBytes_Check(format_spec
))
1963 return _PyFloat_FormatAdvanced(self
,
1964 PyBytes_AS_STRING(format_spec
),
1965 PyBytes_GET_SIZE(format_spec
));
1966 if (PyUnicode_Check(format_spec
)) {
1967 /* Convert format_spec to a str */
1969 PyObject
*str_spec
= PyObject_Str(format_spec
);
1971 if (str_spec
== NULL
)
1974 result
= _PyFloat_FormatAdvanced(self
,
1975 PyBytes_AS_STRING(str_spec
),
1976 PyBytes_GET_SIZE(str_spec
));
1978 Py_DECREF(str_spec
);
1981 PyErr_SetString(PyExc_TypeError
, "__format__ requires str or unicode");
1985 PyDoc_STRVAR(float__format__doc
,
1986 "float.__format__(format_spec) -> string\n"
1988 "Formats the float according to format_spec.");
1991 static PyMethodDef float_methods
[] = {
1992 {"conjugate", (PyCFunction
)float_float
, METH_NOARGS
,
1993 "Returns self, the complex conjugate of any float."},
1994 {"__trunc__", (PyCFunction
)float_trunc
, METH_NOARGS
,
1995 "Returns the Integral closest to x between 0 and x."},
1996 {"as_integer_ratio", (PyCFunction
)float_as_integer_ratio
, METH_NOARGS
,
1997 float_as_integer_ratio_doc
},
1998 {"fromhex", (PyCFunction
)float_fromhex
,
1999 METH_O
|METH_CLASS
, float_fromhex_doc
},
2000 {"hex", (PyCFunction
)float_hex
,
2001 METH_NOARGS
, float_hex_doc
},
2002 {"is_integer", (PyCFunction
)float_is_integer
, METH_NOARGS
,
2003 "Returns True if the float is an integer."},
2005 {"is_inf", (PyCFunction
)float_is_inf
, METH_NOARGS
,
2006 "Returns True if the float is positive or negative infinite."},
2007 {"is_finite", (PyCFunction
)float_is_finite
, METH_NOARGS
,
2008 "Returns True if the float is finite, neither infinite nor NaN."},
2009 {"is_nan", (PyCFunction
)float_is_nan
, METH_NOARGS
,
2010 "Returns True if the float is not a number (NaN)."},
2012 {"__getnewargs__", (PyCFunction
)float_getnewargs
, METH_NOARGS
},
2013 {"__getformat__", (PyCFunction
)float_getformat
,
2014 METH_O
|METH_CLASS
, float_getformat_doc
},
2015 {"__setformat__", (PyCFunction
)float_setformat
,
2016 METH_VARARGS
|METH_CLASS
, float_setformat_doc
},
2017 {"__format__", (PyCFunction
)float__format__
,
2018 METH_VARARGS
, float__format__doc
},
2019 {NULL
, NULL
} /* sentinel */
2022 static PyGetSetDef float_getset
[] = {
2024 (getter
)float_float
, (setter
)NULL
,
2025 "the real part of a complex number",
2028 (getter
)float_getzero
, (setter
)NULL
,
2029 "the imaginary part of a complex number",
2031 {NULL
} /* Sentinel */
2034 PyDoc_STRVAR(float_doc
,
2035 "float(x) -> floating point number\n\
2037 Convert a string or number to a floating point number, if possible.");
2040 static PyNumberMethods float_as_number
= {
2041 float_add
, /*nb_add*/
2042 float_sub
, /*nb_subtract*/
2043 float_mul
, /*nb_multiply*/
2044 float_classic_div
, /*nb_divide*/
2045 float_rem
, /*nb_remainder*/
2046 float_divmod
, /*nb_divmod*/
2047 float_pow
, /*nb_power*/
2048 (unaryfunc
)float_neg
, /*nb_negative*/
2049 (unaryfunc
)float_float
, /*nb_positive*/
2050 (unaryfunc
)float_abs
, /*nb_absolute*/
2051 (inquiry
)float_nonzero
, /*nb_nonzero*/
2058 float_coerce
, /*nb_coerce*/
2059 float_trunc
, /*nb_int*/
2060 float_long
, /*nb_long*/
2061 float_float
, /*nb_float*/
2064 0, /* nb_inplace_add */
2065 0, /* nb_inplace_subtract */
2066 0, /* nb_inplace_multiply */
2067 0, /* nb_inplace_divide */
2068 0, /* nb_inplace_remainder */
2069 0, /* nb_inplace_power */
2070 0, /* nb_inplace_lshift */
2071 0, /* nb_inplace_rshift */
2072 0, /* nb_inplace_and */
2073 0, /* nb_inplace_xor */
2074 0, /* nb_inplace_or */
2075 float_floor_div
, /* nb_floor_divide */
2076 float_div
, /* nb_true_divide */
2077 0, /* nb_inplace_floor_divide */
2078 0, /* nb_inplace_true_divide */
2081 PyTypeObject PyFloat_Type
= {
2082 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
2084 sizeof(PyFloatObject
),
2086 (destructor
)float_dealloc
, /* tp_dealloc */
2087 (printfunc
)float_print
, /* tp_print */
2091 (reprfunc
)float_repr
, /* tp_repr */
2092 &float_as_number
, /* tp_as_number */
2093 0, /* tp_as_sequence */
2094 0, /* tp_as_mapping */
2095 (hashfunc
)float_hash
, /* tp_hash */
2097 (reprfunc
)float_str
, /* tp_str */
2098 PyObject_GenericGetAttr
, /* tp_getattro */
2099 0, /* tp_setattro */
2100 0, /* tp_as_buffer */
2101 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_CHECKTYPES
|
2102 Py_TPFLAGS_BASETYPE
, /* tp_flags */
2103 float_doc
, /* tp_doc */
2104 0, /* tp_traverse */
2106 float_richcompare
, /* tp_richcompare */
2107 0, /* tp_weaklistoffset */
2109 0, /* tp_iternext */
2110 float_methods
, /* tp_methods */
2112 float_getset
, /* tp_getset */
2115 0, /* tp_descr_get */
2116 0, /* tp_descr_set */
2117 0, /* tp_dictoffset */
2120 float_new
, /* tp_new */
2126 /* We attempt to determine if this machine is using IEEE
2127 floating point formats by peering at the bits of some
2128 carefully chosen values. If it looks like we are on an
2129 IEEE platform, the float packing/unpacking routines can
2130 just copy bits, if not they resort to arithmetic & shifts
2131 and masks. The shifts & masks approach works on all finite
2132 values, but what happens to infinities, NaNs and signed
2133 zeroes on packing is an accident, and attempting to unpack
2134 a NaN or an infinity will raise an exception.
2136 Note that if we're on some whacked-out platform which uses
2137 IEEE formats but isn't strictly little-endian or big-
2138 endian, we will fall back to the portable shifts & masks
2141 #if SIZEOF_DOUBLE == 8
2143 double x
= 9006104071832581.0;
2144 if (memcmp(&x
, "\x43\x3f\xff\x01\x02\x03\x04\x05", 8) == 0)
2145 detected_double_format
= ieee_big_endian_format
;
2146 else if (memcmp(&x
, "\x05\x04\x03\x02\x01\xff\x3f\x43", 8) == 0)
2147 detected_double_format
= ieee_little_endian_format
;
2149 detected_double_format
= unknown_format
;
2152 detected_double_format
= unknown_format
;
2155 #if SIZEOF_FLOAT == 4
2157 float y
= 16711938.0;
2158 if (memcmp(&y
, "\x4b\x7f\x01\x02", 4) == 0)
2159 detected_float_format
= ieee_big_endian_format
;
2160 else if (memcmp(&y
, "\x02\x01\x7f\x4b", 4) == 0)
2161 detected_float_format
= ieee_little_endian_format
;
2163 detected_float_format
= unknown_format
;
2166 detected_float_format
= unknown_format
;
2169 double_format
= detected_double_format
;
2170 float_format
= detected_float_format
;
2172 /* Init float info */
2173 if (FloatInfoType
.tp_name
== 0)
2174 PyStructSequence_InitType(&FloatInfoType
, &floatinfo_desc
);
2178 PyFloat_ClearFreeList(void)
2181 PyFloatBlock
*list
, *next
;
2183 int u
; /* remaining unfreed ints per block */
2184 int freelist_size
= 0;
2189 while (list
!= NULL
) {
2191 for (i
= 0, p
= &list
->objects
[0];
2194 if (PyFloat_CheckExact(p
) && Py_REFCNT(p
) != 0)
2199 list
->next
= block_list
;
2201 for (i
= 0, p
= &list
->objects
[0];
2204 if (!PyFloat_CheckExact(p
) ||
2205 Py_REFCNT(p
) == 0) {
2206 Py_TYPE(p
) = (struct _typeobject
*)
2218 return freelist_size
;
2227 int u
; /* total unfreed floats per block */
2229 u
= PyFloat_ClearFreeList();
2231 if (!Py_VerboseFlag
)
2233 fprintf(stderr
, "# cleanup floats");
2235 fprintf(stderr
, "\n");
2239 ": %d unfreed float%s\n",
2240 u
, u
== 1 ? "" : "s");
2242 if (Py_VerboseFlag
> 1) {
2244 while (list
!= NULL
) {
2245 for (i
= 0, p
= &list
->objects
[0];
2248 if (PyFloat_CheckExact(p
) &&
2249 Py_REFCNT(p
) != 0) {
2250 char *buf
= PyOS_double_to_string(
2251 PyFloat_AS_DOUBLE(p
), 'r',
2254 /* XXX(twouters) cast
2261 "# <float at %p, refcnt=%ld, val=%s>\n",
2262 p
, (long)Py_REFCNT(p
), buf
);
2272 /*----------------------------------------------------------------------------
2273 * _PyFloat_{Pack,Unpack}{4,8}. See floatobject.h.
2276 _PyFloat_Pack4(double x
, unsigned char *p
, int le
)
2278 if (float_format
== unknown_format
) {
2299 /* Normalize f to be in the range [1.0, 2.0) */
2300 if (0.5 <= f
&& f
< 1.0) {
2307 PyErr_SetString(PyExc_SystemError
,
2308 "frexp() result out of range");
2314 else if (e
< -126) {
2315 /* Gradual underflow */
2316 f
= ldexp(f
, 126 + e
);
2319 else if (!(e
== 0 && f
== 0.0)) {
2321 f
-= 1.0; /* Get rid of leading 1 */
2324 f
*= 8388608.0; /* 2**23 */
2325 fbits
= (unsigned int)(f
+ 0.5); /* Round */
2326 assert(fbits
<= 8388608);
2328 /* The carry propagated out of a string of 23 1 bits. */
2336 *p
= (sign
<< 7) | (e
>> 1);
2340 *p
= (char) (((e
& 1) << 7) | (fbits
>> 16));
2344 *p
= (fbits
>> 8) & 0xFF;
2356 const char *s
= (char*)&y
;
2359 if (Py_IS_INFINITY(y
) && !Py_IS_INFINITY(x
))
2362 if ((float_format
== ieee_little_endian_format
&& !le
)
2363 || (float_format
== ieee_big_endian_format
&& le
)) {
2368 for (i
= 0; i
< 4; i
++) {
2375 PyErr_SetString(PyExc_OverflowError
,
2376 "float too large to pack with f format");
2381 _PyFloat_Pack8(double x
, unsigned char *p
, int le
)
2383 if (double_format
== unknown_format
) {
2387 unsigned int fhi
, flo
;
2404 /* Normalize f to be in the range [1.0, 2.0) */
2405 if (0.5 <= f
&& f
< 1.0) {
2412 PyErr_SetString(PyExc_SystemError
,
2413 "frexp() result out of range");
2419 else if (e
< -1022) {
2420 /* Gradual underflow */
2421 f
= ldexp(f
, 1022 + e
);
2424 else if (!(e
== 0 && f
== 0.0)) {
2426 f
-= 1.0; /* Get rid of leading 1 */
2429 /* fhi receives the high 28 bits; flo the low 24 bits (== 52 bits) */
2430 f
*= 268435456.0; /* 2**28 */
2431 fhi
= (unsigned int)f
; /* Truncate */
2432 assert(fhi
< 268435456);
2435 f
*= 16777216.0; /* 2**24 */
2436 flo
= (unsigned int)(f
+ 0.5); /* Round */
2437 assert(flo
<= 16777216);
2439 /* The carry propagated out of a string of 24 1 bits. */
2443 /* And it also progagated out of the next 28 bits. */
2452 *p
= (sign
<< 7) | (e
>> 4);
2456 *p
= (unsigned char) (((e
& 0xF) << 4) | (fhi
>> 24));
2460 *p
= (fhi
>> 16) & 0xFF;
2464 *p
= (fhi
>> 8) & 0xFF;
2472 *p
= (flo
>> 16) & 0xFF;
2476 *p
= (flo
>> 8) & 0xFF;
2487 PyErr_SetString(PyExc_OverflowError
,
2488 "float too large to pack with d format");
2492 const char *s
= (char*)&x
;
2495 if ((double_format
== ieee_little_endian_format
&& !le
)
2496 || (double_format
== ieee_big_endian_format
&& le
)) {
2501 for (i
= 0; i
< 8; i
++) {
2510 _PyFloat_Unpack4(const unsigned char *p
, int le
)
2512 if (float_format
== unknown_format
) {
2525 sign
= (*p
>> 7) & 1;
2526 e
= (*p
& 0x7F) << 1;
2531 f
= (*p
& 0x7F) << 16;
2537 "can't unpack IEEE 754 special value "
2538 "on non-IEEE platform");
2549 x
= (double)f
/ 8388608.0;
2551 /* XXX This sadly ignores Inf/NaN issues */
2568 if ((float_format
== ieee_little_endian_format
&& !le
)
2569 || (float_format
== ieee_big_endian_format
&& le
)) {
2574 for (i
= 0; i
< 4; i
++) {
2588 _PyFloat_Unpack8(const unsigned char *p
, int le
)
2590 if (double_format
== unknown_format
) {
2593 unsigned int fhi
, flo
;
2603 sign
= (*p
>> 7) & 1;
2604 e
= (*p
& 0x7F) << 4;
2609 e
|= (*p
>> 4) & 0xF;
2610 fhi
= (*p
& 0xF) << 24;
2616 "can't unpack IEEE 754 special value "
2617 "on non-IEEE platform");
2644 x
= (double)fhi
+ (double)flo
/ 16777216.0; /* 2**24 */
2645 x
/= 268435456.0; /* 2**28 */
2663 if ((double_format
== ieee_little_endian_format
&& !le
)
2664 || (double_format
== ieee_big_endian_format
&& le
)) {
2669 for (i
= 0; i
< 8; i
++) {