]> git.proxmox.com Git - mirror_edk2.git/blame - AppPkg/Applications/Python/Python-2.7.10/Include/floatobject.h
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.10 / Include / floatobject.h
CommitLineData
c8042e10
DM
1\r
2/* Float object interface */\r
3\r
4/*\r
5PyFloatObject represents a (double precision) floating point number.\r
6*/\r
7\r
8#ifndef Py_FLOATOBJECT_H\r
9#define Py_FLOATOBJECT_H\r
10#ifdef __cplusplus\r
11extern "C" {\r
12#endif\r
13\r
14typedef struct {\r
15 PyObject_HEAD\r
16 double ob_fval;\r
17} PyFloatObject;\r
18\r
19PyAPI_DATA(PyTypeObject) PyFloat_Type;\r
20\r
21#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)\r
22#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type)\r
23\r
24/* The str() precision PyFloat_STR_PRECISION is chosen so that in most cases,\r
25 the rounding noise created by various operations is suppressed, while\r
26 giving plenty of precision for practical use. */\r
27\r
28#define PyFloat_STR_PRECISION 12\r
29\r
30#ifdef Py_NAN\r
31#define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN)\r
32#endif\r
33\r
34#define Py_RETURN_INF(sign) do \\r
35 if (copysign(1., sign) == 1.) { \\r
36 return PyFloat_FromDouble(Py_HUGE_VAL); \\r
37 } else { \\r
38 return PyFloat_FromDouble(-Py_HUGE_VAL); \\r
39 } while(0)\r
40\r
41PyAPI_FUNC(double) PyFloat_GetMax(void);\r
42PyAPI_FUNC(double) PyFloat_GetMin(void);\r
43PyAPI_FUNC(PyObject *) PyFloat_GetInfo(void);\r
44\r
45/* Return Python float from string PyObject. Second argument ignored on\r
46 input, and, if non-NULL, NULL is stored into *junk (this tried to serve a\r
47 purpose once but can't be made to work as intended). */\r
48PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*, char** junk);\r
49\r
50/* Return Python float from C double. */\r
51PyAPI_FUNC(PyObject *) PyFloat_FromDouble(double);\r
52\r
53/* Extract C double from Python float. The macro version trades safety for\r
54 speed. */\r
55PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *);\r
56#define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval)\r
57\r
58/* Write repr(v) into the char buffer argument, followed by null byte. The\r
59 buffer must be "big enough"; >= 100 is very safe.\r
60 PyFloat_AsReprString(buf, x) strives to print enough digits so that\r
61 PyFloat_FromString(buf) then reproduces x exactly. */\r
62PyAPI_FUNC(void) PyFloat_AsReprString(char*, PyFloatObject *v);\r
63\r
64/* Write str(v) into the char buffer argument, followed by null byte. The\r
65 buffer must be "big enough"; >= 100 is very safe. Note that it's\r
66 unusual to be able to get back the float you started with from\r
67 PyFloat_AsString's result -- use PyFloat_AsReprString() if you want to\r
68 preserve precision across conversions. */\r
69PyAPI_FUNC(void) PyFloat_AsString(char*, PyFloatObject *v);\r
70\r
71/* _PyFloat_{Pack,Unpack}{4,8}\r
72 *\r
73 * The struct and pickle (at least) modules need an efficient platform-\r
74 * independent way to store floating-point values as byte strings.\r
75 * The Pack routines produce a string from a C double, and the Unpack\r
76 * routines produce a C double from such a string. The suffix (4 or 8)\r
77 * specifies the number of bytes in the string.\r
78 *\r
79 * On platforms that appear to use (see _PyFloat_Init()) IEEE-754 formats\r
80 * these functions work by copying bits. On other platforms, the formats the\r
81 * 4- byte format is identical to the IEEE-754 single precision format, and\r
82 * the 8-byte format to the IEEE-754 double precision format, although the\r
83 * packing of INFs and NaNs (if such things exist on the platform) isn't\r
84 * handled correctly, and attempting to unpack a string containing an IEEE\r
85 * INF or NaN will raise an exception.\r
86 *\r
87 * On non-IEEE platforms with more precision, or larger dynamic range, than\r
88 * 754 supports, not all values can be packed; on non-IEEE platforms with less\r
89 * precision, or smaller dynamic range, not all values can be unpacked. What\r
90 * happens in such cases is partly accidental (alas).\r
91 */\r
92\r
93/* The pack routines write 4 or 8 bytes, starting at p. le is a bool\r
94 * argument, true if you want the string in little-endian format (exponent\r
95 * last, at p+3 or p+7), false if you want big-endian format (exponent\r
96 * first, at p).\r
97 * Return value: 0 if all is OK, -1 if error (and an exception is\r
98 * set, most likely OverflowError).\r
99 * There are two problems on non-IEEE platforms:\r
100 * 1): What this does is undefined if x is a NaN or infinity.\r
101 * 2): -0.0 and +0.0 produce the same string.\r
102 */\r
103PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);\r
104PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);\r
105\r
106/* Used to get the important decimal digits of a double */\r
107PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum);\r
108PyAPI_FUNC(void) _PyFloat_DigitsInit(void);\r
109\r
110/* The unpack routines read 4 or 8 bytes, starting at p. le is a bool\r
111 * argument, true if the string is in little-endian format (exponent\r
112 * last, at p+3 or p+7), false if big-endian (exponent first, at p).\r
113 * Return value: The unpacked double. On error, this is -1.0 and\r
114 * PyErr_Occurred() is true (and an exception is set, most likely\r
115 * OverflowError). Note that on a non-IEEE platform this will refuse\r
116 * to unpack a string that represents a NaN or infinity.\r
117 */\r
118PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);\r
119PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);\r
120\r
121/* free list api */\r
122PyAPI_FUNC(int) PyFloat_ClearFreeList(void);\r
123\r
124/* Format the object based on the format_spec, as defined in PEP 3101\r
125 (Advanced String Formatting). */\r
126PyAPI_FUNC(PyObject *) _PyFloat_FormatAdvanced(PyObject *obj,\r
127 char *format_spec,\r
128 Py_ssize_t format_spec_len);\r
129\r
130/* Round a C double x to the closest multiple of 10**-ndigits. Returns a\r
131 Python float on success, or NULL (with an appropriate exception set) on\r
132 failure. Used in builtin_round in bltinmodule.c. */\r
133PyAPI_FUNC(PyObject *) _Py_double_round(double x, int ndigits);\r
134\r
135\r
136\r
137#ifdef __cplusplus\r
138}\r
139#endif\r
140#endif /* !Py_FLOATOBJECT_H */\r