home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / floatobject.h < prev    next >
C/C++ Source or Header  |  2003-12-30  |  4KB  |  96 lines

  1.  
  2. /* Float object interface */
  3.  
  4. /*
  5. PyFloatObject represents a (double precision) floating point number.
  6. */
  7.  
  8. #ifndef Py_FLOATOBJECT_H
  9. #define Py_FLOATOBJECT_H
  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13.  
  14. typedef struct {
  15.     PyObject_HEAD
  16.     double ob_fval;
  17. } PyFloatObject;
  18.  
  19. PyAPI_DATA(PyTypeObject) PyFloat_Type;
  20.  
  21. #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
  22. #define PyFloat_CheckExact(op) ((op)->ob_type == &PyFloat_Type)
  23.  
  24. /* Return Python float from string PyObject.  Second argument ignored on
  25.    input, and, if non-NULL, NULL is stored into *junk (this tried to serve a
  26.    purpose once but can't be made to work as intended). */
  27. PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*, char** junk);
  28.  
  29. /* Return Python float from C double. */
  30. PyAPI_FUNC(PyObject *) PyFloat_FromDouble(double);
  31.  
  32. /* Extract C double from Python float.  The macro version trades safety for
  33.    speed. */
  34. PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *);
  35. #define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval)
  36.  
  37. /* Write repr(v) into the char buffer argument, followed by null byte.  The
  38.    buffer must be "big enough"; >= 100 is very safe.
  39.    PyFloat_AsReprString(buf, x) strives to print enough digits so that
  40.    PyFloat_FromString(buf) then reproduces x exactly. */
  41. PyAPI_FUNC(void) PyFloat_AsReprString(char*, PyFloatObject *v);
  42.  
  43. /* Write str(v) into the char buffer argument, followed by null byte.  The
  44.    buffer must be "big enough"; >= 100 is very safe.  Note that it's
  45.    unusual to be able to get back the float you started with from
  46.    PyFloat_AsString's result -- use PyFloat_AsReprString() if you want to
  47.    preserve precision across conversions. */
  48. PyAPI_FUNC(void) PyFloat_AsString(char*, PyFloatObject *v);
  49.  
  50. /* _PyFloat_{Pack,Unpack}{4,8}
  51.  *
  52.  * The struct and pickle (at least) modules need an efficient platform-
  53.  * independent way to store floating-point values as byte strings.
  54.  * The Pack routines produce a string from a C double, and the Unpack
  55.  * routines produce a C double from such a string.  The suffix (4 or 8)
  56.  * specifies the number of bytes in the string.
  57.  *
  58.  * Excepting NaNs and infinities (which aren't handled correctly), the 4-
  59.  * byte format is identical to the IEEE-754 single precision format, and
  60.  * the 8-byte format to the IEEE-754 double precision format.  On non-
  61.  * IEEE platforms with more precision, or larger dynamic range, than
  62.  * 754 supports, not all values can be packed; on non-IEEE platforms with
  63.  * less precision, or smaller dynamic range, not all values can be
  64.  * unpacked.  What happens in such cases is partly accidental (alas).
  65.  */
  66.  
  67. /* The pack routines write 4 or 8 bytes, starting at p.  le is a bool
  68.  * argument, true if you want the string in little-endian format (exponent
  69.  * last, at p+3 or p+7), false if you want big-endian format (exponent
  70.  * first, at p).
  71.  * Return value:  0 if all is OK, -1 if error (and an exception is
  72.  * set, most likely OverflowError).
  73.  * Bug:  What this does is undefined if x is a NaN or infinity.
  74.  * Bug:  -0.0 and +0.0 produce the same string.
  75.  */
  76. PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);
  77. PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
  78.  
  79. /* The unpack routines read 4 or 8 bytes, starting at p.  le is a bool
  80.  * argument, true if the string is in little-endian format (exponent
  81.  * last, at p+3 or p+7), false if big-endian (exponent first, at p).
  82.  * Return value:  The unpacked double.  On error, this is -1.0 and
  83.  * PyErr_Occurred() is true (and an exception is set, most likely
  84.  * OverflowError).
  85.  * Bug:  What this does is undefined if the string represents a NaN or
  86.  * infinity.
  87.  */
  88. PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);
  89. PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);
  90.  
  91.  
  92. #ifdef __cplusplus
  93. }
  94. #endif
  95. #endif /* !Py_FLOATOBJECT_H */
  96.