/*  float.h
 
    Defines implementation specific macros for dealing with
    floating point.
 
    Copyright (c) Borland International 1987,1988
    All Rights Reserved.
*/
#if __STDC__
#define _Cdecl
#else
#define _Cdecl    cdecl
#endif
 
#define FLT_RADIX        2
#define FLT_ROUNDS          1
#define FLT_GUARD        1
#define FLT_NORMALIZE           1
 
#define DBL_DIG             15
#define FLT_DIG             6
#define LDBL_DIG         19
 
#define DBL_MANT_DIG        53
#define FLT_MANT_DIG        24
#define LDBL_MANT_DIG           64
 
#define DBL_EPSILON         2.2204460492503131E-16
#define FLT_EPSILON         1.19209290E-07F
#define LDBL_EPSILON        1.084202172485504E-19
 
/* smallest positive IEEE normal numbers */
#define DBL_MIN             2.2250738585072014E-308
#define FLT_MIN             1.17549435E-38F
#define LDBL_MIN            _tiny_ldble
 
#define DBL_MAX          _huge_dble
#define FLT_MAX          _huge_flt
#define LDBL_MAX         _huge_ldble
 
#define DBL_MAX_EXP         +1024
#define FLT_MAX_EXP         +128
#define LDBL_MAX_EXP        +16384
 
#define DBL_MAX_10_EXP          +308
#define FLT_MAX_10_EXP          +38
#define LDBL_MAX_10_EXP         +4932
 
#define DBL_MIN_10_EXP          -307
#define FLT_MIN_10_EXP          -37
#define LDBL_MIN_10_EXP         -4931
 
#define DBL_MIN_EXP         -1021
#define FLT_MIN_EXP         -125
#define LDBL_MIN_EXP        -16381
 
extern float _Cdecl _huge_flt;
extern double _Cdecl _huge_dble;
extern long double _Cdecl _huge_ldble;
extern long double _Cdecl _tiny_ldble;
 
unsigned int _Cdecl _clear87(void);
unsigned int _Cdecl _control87(unsigned int new, unsigned int mask);
void        _Cdecl _fpreset(void);
unsigned int _Cdecl _status87(void);
 
/* 8087/80287 Status Word format   */
 
#define SW_INVALID       0x0001 /* Invalid operation     */
#define SW_DENORMAL      0x0002 /* Denormalized operand     */
#define SW_ZERODIVIDE       0x0004 /* Zero divide           */
#define SW_OVERFLOW      0x0008 /* Overflow          */
#define SW_UNDERFLOW     0x0010 /* Underflow         */
#define SW_INEXACT       0x0020 /* Precision (Inexact result)   */
 
/* 8087/80287 Control Word format */
 
#define MCW_EM           0x003f /* interrupt Exception Masks    */
#define        EM_INVALID       0x0001 /*   invalid         */
#define        EM_DENORMAL      0x0002 /*   denormal        */
#define        EM_ZERODIVIDE 0x0004 /*   zero divide     */
#define        EM_OVERFLOW      0x0008 /*   overflow        */
#define        EM_UNDERFLOW  0x0010 /*   underflow           */
#define        EM_INEXACT       0x0020 /*   inexact (precision) */
 
#define MCW_IC           0x1000 /* Infinity Control      */
#define        IC_AFFINE     0x1000 /*   affine          */
#define        IC_PROJECTIVE 0x0000 /*   projective          */
 
#define MCW_RC           0x0c00 /* Rounding Control      */
#define        RC_CHOP       0x0c00 /*   chop         */
#define        RC_UP     0x0800 /*   up              */
#define        RC_DOWN       0x0400 /*   down         */
#define        RC_NEAR       0x0000 /*   near         */
 
#define MCW_PC           0x0300 /* Precision Control     */
#define        PC_24     0x0000 /*    24 bits        */
#define        PC_53     0x0200 /*    53 bits        */
#define        PC_64     0x0300 /*    64 bits        */
 
/* 8087/80287 Initial Control Word */
/* use affine infinity, mask underflow and precision exceptions */
 
#define CW_DEFAULT   (RC_NEAR+PC_64+IC_AFFINE+EM_UNDERFLOW+EM_INEXACT)
 
/*
    SIGFPE signal error types (for integer & float exceptions).
*/
#define    FPE_INTOVFLOW     126 /* 80x86 Interrupt on overflow  */
#define    FPE_INTDIV0       127 /* 80x86 Integer divide by zero */
 
#define    FPE_INVALID       129 /* 80x87 invalid operation  */
#define    FPE_ZERODIVIDE       131 /* 80x87 divide by zero     */
#define    FPE_OVERFLOW      132 /* 80x87 arithmetic overflow    */
#define    FPE_UNDERFLOW     133 /* 80x87 arithmetic underflow   */
#define    FPE_INEXACT       134 /* 80x87 precision loss     */
#define    FPE_EXPLICITGEN      140 /* When SIGFPE is raise()'d */
 
/*
           SIGSEGV signal error types.
*/
#define    SEGV_BOUND    10  /* A BOUND violation (SIGSEGV)  */
#define    SEGV_EXPLICITGEN  11  /* When SIGSEGV is raise()'d    */
 
/*
           SIGILL signal error types.
*/
#define    ILL_EXECUTION     20  /* Illegal operation exception  */
#define    ILL_EXPLICITGEN      21  /* When SIGILL is raise()'d */