home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / progs / CB / DATA.Z / FLOAT.H < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-15  |  5.7 KB  |  180 lines

  1. /*  float.h
  2.  
  3.     Defines implementation specific macros for dealing with
  4.     floating point.
  5.  
  6. */
  7.  
  8. /* $Copyright: 1987$ */
  9. /* $Revision:   8.2  $ */
  10.  
  11. #ifndef __FLOAT_H
  12. #define __FLOAT_H
  13.  
  14. #if !defined( ___DEFS_H )
  15. #include <_defs.h>
  16. #endif
  17.  
  18.  
  19. #if !defined(RC_INVOKED)
  20.  
  21. #if defined(__STDC__)
  22. #pragma warn -nak
  23. #endif
  24.  
  25. #endif  /* !RC_INVOKED */
  26.  
  27.  
  28. #define FLT_RADIX           2
  29. #define FLT_ROUNDS          1
  30. #define FLT_GUARD           1
  31. #define FLT_NORMALIZE       1
  32.  
  33. #define DBL_DIG             15
  34. #define FLT_DIG             6
  35. #define LDBL_DIG            18
  36.  
  37. #define DBL_MANT_DIG        53
  38. #define FLT_MANT_DIG        24
  39. #define LDBL_MANT_DIG       64
  40.  
  41. #define DBL_EPSILON         2.2204460492503131E-16
  42. #define FLT_EPSILON         1.19209290E-07F
  43. #define LDBL_EPSILON        1.084202172485504434e-019L
  44.  
  45. /* smallest positive IEEE normal numbers */
  46. #define DBL_MIN             2.2250738585072014E-308
  47. #define FLT_MIN             1.17549435E-38F
  48. #define LDBL_MIN            _tiny_ldble
  49.  
  50. #define DBL_MAX             _huge_dble
  51. #define FLT_MAX             _huge_flt
  52. #define LDBL_MAX            _huge_ldble
  53.  
  54. #define DBL_MAX_EXP         +1024
  55. #define FLT_MAX_EXP         +128
  56. #define LDBL_MAX_EXP        +16384
  57.  
  58. #define DBL_MAX_10_EXP      +308
  59. #define FLT_MAX_10_EXP      +38
  60. #define LDBL_MAX_10_EXP     +4932
  61.  
  62. #define DBL_MIN_10_EXP      -307
  63. #define FLT_MIN_10_EXP      -37
  64. #define LDBL_MIN_10_EXP     -4931
  65.  
  66. #define DBL_MIN_EXP         -1021
  67. #define FLT_MIN_EXP         -125
  68. #define LDBL_MIN_EXP        -16381
  69.  
  70. extern float        _RTLENTRY _EXPDATA _huge_flt;
  71. extern double       _RTLENTRY _EXPDATA _huge_dble;
  72. extern long double  _RTLENTRY _EXPDATA _huge_ldble;
  73. extern long double  _RTLENTRY _EXPDATA _tiny_ldble;
  74.  
  75. #ifdef __cplusplus
  76. extern "C" {
  77. #endif
  78. unsigned int _RTLENTRY          _clear87(void);
  79. unsigned int _RTLENTRY          _control87(unsigned int __newcw, unsigned int __mask);
  80. void         _RTLENTRY          _fpreset(void);
  81. unsigned int _RTLENTRY          _status87(void);
  82. int          _RTLENTRY          _isnan (double d);
  83. int          _RTLENTRY          _isnanl (long double ld);
  84. int          _RTLENTRY          _finite (double d);
  85. int          _RTLENTRY          _finitel (long double ld);
  86. #ifdef __cplusplus
  87. }
  88. #endif
  89.  
  90. #if !defined(__STDC__)
  91.  
  92. /* 387 Status Word format   */
  93.  
  94. #define SW_INVALID      0x0001  /* Invalid operation            */
  95. #define SW_DENORMAL     0x0002  /* Denormalized operand         */
  96. #define SW_ZERODIVIDE   0x0004  /* Zero divide                  */
  97. #define SW_OVERFLOW     0x0008  /* Overflow                     */
  98. #define SW_UNDERFLOW    0x0010  /* Underflow                    */
  99. #define SW_INEXACT      0x0020  /* Precision (Inexact result)   */
  100. #define SW_STACKFAULT   0x0040  /* Stack fault                  */
  101.  
  102. /* 387 Control Word format */
  103.  
  104. #define MCW_EM              0x003f  /* interrupt Exception Masks*/
  105. #define     EM_INVALID      0x0001  /*   invalid                */
  106. #define     EM_DENORMAL     0x0002  /*   denormal               */
  107. #define     EM_ZERODIVIDE   0x0004  /*   zero divide            */
  108. #define     EM_OVERFLOW     0x0008  /*   overflow               */
  109. #define     EM_UNDERFLOW    0x0010  /*   underflow              */
  110. #define     EM_INEXACT      0x0020  /*   inexact (precision)    */
  111.  
  112. #define MCW_IC              0x1000  /* Infinity Control */
  113. #define     IC_AFFINE       0x1000  /*   affine         */
  114. #define     IC_PROJECTIVE   0x0000  /*   projective     */
  115.  
  116. #define MCW_RC          0x0c00  /* Rounding Control     */
  117. #define     RC_CHOP     0x0c00  /*   chop               */
  118. #define     RC_UP       0x0800  /*   up                 */
  119. #define     RC_DOWN     0x0400  /*   down               */
  120. #define     RC_NEAR     0x0000  /*   near               */
  121.  
  122. #define MCW_PC          0x0300  /* Precision Control    */
  123. #define     PC_24       0x0000  /*    24 bits           */
  124. #define     PC_53       0x0200  /*    53 bits           */
  125. #define     PC_64       0x0300  /*    64 bits           */
  126.  
  127. /* 387 Initial Control Word */
  128. /* use affine infinity, mask underflow and precision exceptions */
  129.  
  130. #define CW_DEFAULT  _default87
  131. extern unsigned int _RTLENTRY _default87;
  132.  
  133. /*
  134.     SIGFPE signal error types (for integer & float exceptions).
  135. */
  136. #define FPE_INTOVFLOW       126 /* 80x86 Interrupt on overflow  */
  137. #define FPE_INTDIV0         127 /* 80x86 Integer divide by zero */
  138.  
  139. #define FPE_INVALID         129 /* 80x87 invalid operation      */
  140. #define FPE_ZERODIVIDE      131 /* 80x87 divide by zero         */
  141. #define FPE_OVERFLOW        132 /* 80x87 arithmetic overflow    */
  142. #define FPE_UNDERFLOW       133 /* 80x87 arithmetic underflow   */
  143. #define FPE_INEXACT         134 /* 80x87 precision loss         */
  144. #define FPE_STACKFAULT      135 /* 80x87 stack overflow         */
  145. #define FPE_EXPLICITGEN     140 /* When SIGFPE is raise()'d     */
  146.  
  147. /*
  148.             SIGSEGV signal error types.
  149. */
  150. #define SEGV_BOUND          10  /* A BOUND violation (SIGSEGV)  */
  151. #define SEGV_EXPLICITGEN    11  /* When SIGSEGV is raise()'d    */
  152. #if defined(__OS2__) || defined(__WIN32__)
  153. #define SEGV_ACCESS         12  /* Access violation */
  154. #define SEGV_STACK          13  /* Unable to grow stack */
  155. #endif
  156.  
  157. /*
  158.             SIGILL signal error types.
  159. */
  160. #define ILL_EXECUTION       20  /* Illegal operation exception  */
  161. #define ILL_EXPLICITGEN     21  /* When SIGILL is raise()'d     */
  162. #if defined(__OS2__) || defined(__WIN32__)
  163. #define ILL_PRIVILEGED      22  /* Privileged instruction */
  164. #endif
  165.  
  166. #endif  /* !__STDC__ */
  167.  
  168.  
  169. #if !defined(RC_INVOKED)
  170.  
  171. #if defined(__STDC__)
  172. #pragma warn .nak
  173. #endif
  174.  
  175. #endif  /* !RC_INVOKED */
  176.  
  177.  
  178. #endif  /* __FLOAT_H */
  179.  
  180.