annotate Include/floatobject.h @ 45837:c5241069fffd legacy-trunk

Speed up test_dict by about 10x by only checking selected dict literal sizes, instead of every integer from 0 to 400. Exhaustive testing wastes time without providing enough more assurance that the code is correct.
author Jeffrey Yasskin <jyasskin@gmail.com>
date Tue, 18 Mar 2008 05:12:41 +0000
parents 8fdd6d62ea55
children 5bc7b20dc04a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
853b736a6a9e Added copyright notice.
Guido van Rossum <guido@python.org>
parents: 6
diff changeset
1
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 /* Float object interface */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 /*
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
5 PyFloatObject represents a (double precision) floating point number.
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 */
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
13444
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
8 #ifndef Py_FLOATOBJECT_H
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
9 #define Py_FLOATOBJECT_H
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
10 #ifdef __cplusplus
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
11 extern "C" {
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
12 #endif
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
13
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 typedef struct {
13444
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
15 PyObject_HEAD
5709ddba423c ANSI-fication and Py_PROTO extermination.
Fred Drake <fdrake@acm.org>
parents: 13256
diff changeset
16 double ob_fval;
2129
05360cd616ae The great renaming, phase two: all header files have been updated to
Guido van Rossum <guido@python.org>
parents: 2058
diff changeset
17 } PyFloatObject;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 19839
diff changeset
19 PyAPI_DATA(PyTypeObject) PyFloat_Type;
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
19550
19d271f297dc Make the PyXXX_Check() macros for the numeric types inheritance-aware.
Guido van Rossum <guido@python.org>
parents: 17707
diff changeset
21 #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
44350
26384b8180c7 #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. Macros for b/w compatibility are available.
Christian Heimes <christian@cheimes.de>
parents: 44262
diff changeset
22 #define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
44085
c218d1ac916e Feature #1534
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
24 PyAPI_FUNC(double) PyFloat_GetMax(void);
c218d1ac916e Feature #1534
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
25 PyAPI_FUNC(double) PyFloat_GetMin(void);
c218d1ac916e Feature #1534
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
26 PyAPI_FUNC(PyObject *) PyFloat_GetInfo(void);
c218d1ac916e Feature #1534
Christian Heimes <christian@cheimes.de>
parents: 42333
diff changeset
27
17707
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
28 /* Return Python float from string PyObject. Second argument ignored on
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
29 input, and, if non-NULL, NULL is stored into *junk (this tried to serve a
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
30 purpose once but can't be made to work as intended). */
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 19839
diff changeset
31 PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*, char** junk);
17707
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
32
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
33 /* Return Python float from C double. */
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 19839
diff changeset
34 PyAPI_FUNC(PyObject *) PyFloat_FromDouble(double);
17707
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
35
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
36 /* Extract C double from Python float. The macro version trades safety for
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
37 speed. */
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 19839
diff changeset
38 PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *);
17707
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
39 #define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval)
6
fc6fcd7df4f7 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40
17707
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
41 /* Write repr(v) into the char buffer argument, followed by null byte. The
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
42 buffer must be "big enough"; >= 100 is very safe.
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
43 PyFloat_AsReprString(buf, x) strives to print enough digits so that
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
44 PyFloat_FromString(buf) then reproduces x exactly. */
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 19839
diff changeset
45 PyAPI_FUNC(void) PyFloat_AsReprString(char*, PyFloatObject *v);
17707
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
46
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
47 /* Write str(v) into the char buffer argument, followed by null byte. The
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
48 buffer must be "big enough"; >= 100 is very safe. Note that it's
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
49 unusual to be able to get back the float you started with from
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
50 PyFloat_AsString's result -- use PyFloat_AsReprString() if you want to
fe4c1034b480 SF bug #422177: Results from .pyc differs from .py
Tim Peters <tim.peters@gmail.com>
parents: 14375
diff changeset
51 preserve precision across conversions. */
24752
c1eb668525e1 Excise DL_EXPORT from Include.
Mark Hammond <mhammond@skippinet.com.au>
parents: 19839
diff changeset
52 PyAPI_FUNC(void) PyFloat_AsString(char*, PyFloatObject *v);
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
53
28335
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
54 /* _PyFloat_{Pack,Unpack}{4,8}
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
55 *
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
56 * The struct and pickle (at least) modules need an efficient platform-
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
57 * independent way to store floating-point values as byte strings.
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
58 * The Pack routines produce a string from a C double, and the Unpack
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
59 * routines produce a C double from such a string. The suffix (4 or 8)
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
60 * specifies the number of bytes in the string.
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
61 *
34972
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
62 * On platforms that appear to use (see _PyFloat_Init()) IEEE-754 formats
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
63 * these functions work by copying bits. On other platforms, the formats the
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
64 * 4- byte format is identical to the IEEE-754 single precision format, and
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
65 * the 8-byte format to the IEEE-754 double precision format, although the
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
66 * packing of INFs and NaNs (if such things exist on the platform) isn't
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
67 * handled correctly, and attempting to unpack a string containing an IEEE
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
68 * INF or NaN will raise an exception.
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
69 *
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
70 * On non-IEEE platforms with more precision, or larger dynamic range, than
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
71 * 754 supports, not all values can be packed; on non-IEEE platforms with less
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
72 * precision, or smaller dynamic range, not all values can be unpacked. What
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
73 * happens in such cases is partly accidental (alas).
28335
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
74 */
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
75
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
76 /* The pack routines write 4 or 8 bytes, starting at p. le is a bool
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
77 * argument, true if you want the string in little-endian format (exponent
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
78 * last, at p+3 or p+7), false if you want big-endian format (exponent
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
79 * first, at p).
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
80 * Return value: 0 if all is OK, -1 if error (and an exception is
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
81 * set, most likely OverflowError).
34972
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
82 * There are two problems on non-IEEE platforms:
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
83 * 1): What this does is undefined if x is a NaN or infinity.
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
84 * 2): -0.0 and +0.0 produce the same string.
28335
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
85 */
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
86 PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
87 PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
88
44262
24749a380409 Backport of r59456:59458 from py3k to trunk
Christian Heimes <christian@cheimes.de>
parents: 44085
diff changeset
89 /* Used to get the important decimal digits of a double */
24749a380409 Backport of r59456:59458 from py3k to trunk
Christian Heimes <christian@cheimes.de>
parents: 44085
diff changeset
90 PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum);
24749a380409 Backport of r59456:59458 from py3k to trunk
Christian Heimes <christian@cheimes.de>
parents: 44085
diff changeset
91 PyAPI_FUNC(void) _PyFloat_DigitsInit(void);
24749a380409 Backport of r59456:59458 from py3k to trunk
Christian Heimes <christian@cheimes.de>
parents: 44085
diff changeset
92
28335
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
93 /* The unpack routines read 4 or 8 bytes, starting at p. le is a bool
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
94 * argument, true if the string is in little-endian format (exponent
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
95 * last, at p+3 or p+7), false if big-endian (exponent first, at p).
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
96 * Return value: The unpacked double. On error, this is -1.0 and
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
97 * PyErr_Occurred() is true (and an exception is set, most likely
34972
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
98 * OverflowError). Note that on a non-IEEE platform this will refuse
1dd8a0d64432 This is my patch:
Michael W. Hudson <mwh@python.net>
parents: 28335
diff changeset
99 * to unpack a string that represents a NaN or infinity.
28335
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
100 */
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
101 PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
102 PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
103
45143
8fdd6d62ea55 Patch #1953
Christian Heimes <christian@cheimes.de>
parents: 44350
diff changeset
104 /* free list api */
8fdd6d62ea55 Patch #1953
Christian Heimes <christian@cheimes.de>
parents: 44350
diff changeset
105 PyAPI_FUNC(void) PyFloat_CompactFreeList(size_t *, size_t *, size_t *);
28335
70003b0cb837 New private API functions _PyFloat_{Pack,Unpack}(4,8}. This is a
Tim Peters <tim.peters@gmail.com>
parents: 24752
diff changeset
106
1329
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
107 #ifdef __cplusplus
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
108 }
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
109 #endif
519c25039c6a * Added support for X11 modules.
Guido van Rossum <guido@python.org>
parents: 1257
diff changeset
110 #endif /* !Py_FLOATOBJECT_H */