home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / sybase / starbuck / h.z / FLOAT.H < prev    next >
C/C++ Source or Header  |  1996-07-24  |  7KB  |  211 lines

  1. /*
  2.  *  float.h    Floating point functions
  3.  *
  4.  *  Copyright by WATCOM International Corp. 1988-1996.  All rights reserved.
  5.  */
  6. #ifndef _FLOAT_H_INCLUDED
  7. #define _FLOAT_H_INCLUDED
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11.  
  12. #ifndef _COMDEF_H_INCLUDED
  13.  #include <_comdef.h>
  14. #endif
  15.  
  16. #define FLT_RADIX    2
  17. #define FLT_ROUNDS    1    /* round to nearest */
  18.  
  19. /* number of base-FLT_RADIX digits in the floating point mantissa */
  20. #define FLT_MANT_DIG    24
  21. #define DBL_MANT_DIG    53
  22. #define LDBL_MANT_DIG    53
  23.  
  24. /* number of decimal digits of precision */
  25. #define FLT_DIG     6
  26. #define DBL_DIG     15
  27. #define LDBL_DIG    15
  28.  
  29. /* minimum negative integer such that FLT_RADIX raised to that power minus 1
  30.  is a normalized floating point number */
  31. #define FLT_MIN_EXP    (-127)
  32. #define DBL_MIN_EXP    (-1023)
  33. #define LDBL_MIN_EXP    (-1023)
  34.  
  35. /* minimum negative integer such that 10 raised to that power is in the
  36.    range of normalized floating point numbers */
  37. #define FLT_MIN_10_EXP    (-38)
  38. #define DBL_MIN_10_EXP    (-307)
  39. #define LDBL_MIN_10_EXP (-307)
  40.  
  41. /* maximum integer such that FLT_RADIX raised to that power minus 1 is a
  42.    representable floating point number */
  43. #define FLT_MAX_EXP    127
  44. #define DBL_MAX_EXP    1023
  45. #define LDBL_MAX_EXP    1023
  46.  
  47. /* maximum integer such that 10 raised to that power is in the range of
  48.    representable floating point numbers */
  49. #define FLT_MAX_10_EXP    38
  50. #define DBL_MAX_10_EXP    308
  51. #define LDBL_MAX_10_EXP 308
  52.  
  53. /* maximum representable floating point number */
  54. #define FLT_MAX     3.402823466e+38f
  55. #define DBL_MAX     1.79769313486231500e+308
  56. #define LDBL_MAX    DBL_MAX
  57.  
  58. /* minimum positive floating point number x such that 1.0 + x != 1.0 */
  59. #define FLT_EPSILON    1.192092896e-7f
  60. #define DBL_EPSILON    2.22044604925031300e-016
  61. #define LDBL_EPSILON    DBL_EPSILON
  62.  
  63. /* minimum representable positive floating point number */
  64. #define FLT_MIN     1.175494351e-38f
  65. #define DBL_MIN     2.22507385850720200e-308
  66. #define LDBL_MIN    DBL_MIN
  67.  
  68. /*
  69.  *  8087/80287/80387 math co-processor control information
  70.  */
  71.  
  72. /* 80(x)87 Control Word Mask and bit definitions. */
  73.  
  74. #define _MCW_EM     0x003f    /* Interrupt Exception Masks */
  75. #define _EM_INVALID    0x0001    /*   invalid */
  76. #define _EM_DENORMAL    0x0002    /*   denormal */
  77. #define _EM_ZERODIVIDE    0x0004    /*   zero divide */
  78. #define _EM_OVERFLOW    0x0008    /*   overflow */
  79. #define _EM_UNDERFLOW    0x0010    /*   underflow */
  80. #define _EM_INEXACT    0x0020    /*   inexact result - precision */
  81.  
  82. #define _MCW_IC     0x1000    /* Infinity Control */
  83. #define _IC_AFFINE    0x1000    /*   affine */
  84. #define _IC_PROJECTIVE    0x0000    /*   projective */
  85.  
  86. #define _MCW_RC     0x0c00    /* Rounding Control */
  87. #define _RC_NEAR    0x0000    /*   near */
  88. #define _RC_DOWN    0x0400    /*   down */
  89. #define _RC_UP        0x0800    /*   up */
  90. #define _RC_CHOP    0x0c00    /*   chop */
  91.  
  92. #define _MCW_PC     0x0300    /* Precision Control */
  93. #define _PC_24        0x0000    /*    24 bits */
  94. #define _PC_53        0x0200    /*    53 bits */
  95. #define _PC_64        0x0300    /*    64 bits */
  96.  
  97. /* initial Control Word value */
  98.  
  99. #define _CW_DEFAULT (_IC_AFFINE | _RC_NEAR | _PC_53 \
  100.             | _EM_INVALID | _EM_DENORMAL | _EM_ZERODIVIDE \
  101.             | _EM_OVERFLOW | _EM_UNDERFLOW | _EM_INEXACT)
  102.  
  103. /* 80(x)87 Status Word bit definitions */
  104.  
  105. #define _SW_INVALID    0x0001    /* invalid */
  106. #define _SW_DENORMAL    0x0002    /* denormal */
  107. #define _SW_ZERODIVIDE    0x0004    /* zero divide */
  108. #define _SW_OVERFLOW    0x0008    /* overflow */
  109. #define _SW_UNDERFLOW    0x0010    /* underflow */
  110. #define _SW_INEXACT    0x0020    /* inexact (precision) */
  111.  
  112. /* the following are generated by software */
  113.  
  114. #define _SW_UNEMULATED        0x0040  /* unemulated instruction */
  115. /* invalid subconditions (_SW_INVALID also set) */
  116. #define _SW_SQRTNEG        0x0080  /* square root of a neg number */
  117. #define _SW_STACKOVERFLOW   0x0200  /* FP stack overflow */
  118. #define _SW_STACKUNDERFLOW  0x0400  /* FP stack underflow */
  119.  
  120. /* Floating-point error codes */
  121.  
  122. #define _FPE_INVALID        0x81
  123. #define _FPE_DENORMAL        0x82
  124. #define _FPE_ZERODIVIDE     0x83
  125. #define _FPE_OVERFLOW        0x84
  126. #define _FPE_UNDERFLOW        0x85
  127. #define _FPE_INEXACT        0x86
  128.  
  129. #define _FPE_UNEMULATED     0x87
  130. #define _FPE_SQRTNEG        0x88
  131. #define _FPE_STACKOVERFLOW    0x8a
  132. #define _FPE_STACKUNDERFLOW    0x8b
  133. #define _FPE_EXPLICITGEN    0x8c
  134. #define _FPE_IOVERFLOW        0x8d /* issued on fist(p) when value is too
  135.                     large to be represented as integer */
  136. #define _FPE_LOGERR        0x8e
  137. #define _FPE_MODERR        0x8f
  138.  
  139. #if !defined(NO_EXT_KEYS) /* extensions enabled */
  140. /*
  141.  *  8087/80287/80387 math co-processor control information
  142.  */
  143.  
  144. /* 80(x)87 Control Word Mask and bit definitions. */
  145.  
  146. #define MCW_EM        _MCW_EM
  147. #define EM_INVALID    _EM_INVALID
  148. #define EM_DENORMAL    _EM_DENORMAL
  149. #define EM_ZERODIVIDE    _EM_ZERODIVIDE
  150. #define EM_OVERFLOW    _EM_OVERFLOW
  151. #define EM_UNDERFLOW    _EM_UNDERFLOW
  152. #define EM_INEXACT    _EM_INEXACT
  153. #define EM_PRECISION    _EM_INEXACT    /* WATCOM's name */
  154.  
  155. #define MCW_IC        _MCW_IC
  156. #define IC_AFFINE    _IC_AFFINE
  157. #define IC_PROJECTIVE    _IC_PROJECTIVE
  158.  
  159. #define MCW_RC        _MCW_RC
  160. #define RC_NEAR     _RC_NEAR
  161. #define RC_DOWN     _RC_DOWN
  162. #define RC_UP        _RC_UP
  163. #define RC_CHOP     _RC_CHOP
  164.  
  165. #define MCW_PC        _MCW_PC
  166. #define PC_24        _PC_24
  167. #define PC_53        _PC_53
  168. #define PC_64        _PC_64
  169.  
  170. /* 80(x)87 Status Word bit definitions */
  171.  
  172. #define SW_INVALID        _SW_INVALID
  173. #define SW_DENORMAL        _SW_DENORMAL
  174. #define SW_ZERODIVIDE        _SW_ZERODIVIDE
  175. #define SW_OVERFLOW        _SW_OVERFLOW
  176. #define SW_UNDERFLOW        _SW_UNDERFLOW
  177. #define SW_INEXACT        _SW_INEXACT
  178. /* the following are generated by software */
  179. #define SW_UNEMULATED        _SW_UNEMULATED
  180. #define SW_SQRTNEG        _SW_SQRTNEG
  181. #define SW_STACKOVERFLOW    _SW_STACKOVERFLOW
  182. #define SW_STACKUNDERFLOW   _SW_STACKUNDERFLOW
  183.  
  184. /* Floating-point error codes */
  185.  
  186. #define FPE_INVALID        _FPE_INVALID
  187. #define FPE_DENORMAL        _FPE_DENORMAL
  188. #define FPE_ZERODIVIDE        _FPE_ZERODIVIDE
  189. #define FPE_OVERFLOW        _FPE_OVERFLOW
  190. #define FPE_UNDERFLOW        _FPE_UNDERFLOW
  191. #define FPE_INEXACT        _FPE_INEXACT
  192. #define FPE_UNEMULATED        _FPE_UNEMULATED
  193. #define FPE_SQRTNEG        _FPE_SQRTNEG
  194. #define FPE_STACKOVERFLOW   _FPE_STACKOVERFLOW
  195. #define FPE_STACKUNDERFLOW  _FPE_STACKUNDERFLOW
  196. #define FPE_EXPLICITGEN     _FPE_EXPLICITGEN
  197. #define FPE_IOVERFLOW        _FPE_IOVERFLOW
  198. #define FPE_LOGERR        _FPE_LOGERR
  199. #define FPE_MODERR        _FPE_MODERR
  200.  
  201. _WMRTLINK extern unsigned _clear87(void);
  202. _WCRTLINK extern unsigned _control87(unsigned,unsigned);
  203. _WCRTLINK extern void     _fpreset(void);
  204. _WMRTLINK extern unsigned _status87(void);
  205. #endif
  206.  
  207. #ifdef __cplusplus
  208. };
  209. #endif
  210. #endif
  211.