| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | /********************************************************************************                                                                              **      File fp_private.h,                                                      **      All pack 4 dependencies for the MathLib elems plus some defines used    **      throughout MathLib.                                                     **                                                                              **      Copyright © 1991 Apple Computer, Inc.  All rights reserved.             **                                                                              **      Written by Ali Sazegari, started on October 1991,                       **                                                                              **      W A R N I N G:  This routine expects a 64 bit double model.             **                                                                              ********************************************************************************/#define      NoException            0/********************************************************************************                              Values of constants.                            ********************************************************************************///#define    SgnMask            0x8000#define      dSgnMask           0x80000000#define      sSgnMask           0x7FFFFFFF//#define    ExpMask            0x7FFF#define      dExpMask           0x7FF00000#define      sExpMask           0xFF000000                                          /* according to rounding BIG & SMALL are:  */#define      BIG               1.1e+300   /* used to deliver ±° or largest number,   */#define      SMALL             1.1e-300   /* used to deliver ±0 or smallest number.  */#define      InfExp            0x7FF#define      dMaxExp           0x7FF00000#define      MaxExpP1          1024#define      MaxExp            1023#define      DenormLimit       -52//#define    ManMask           0x80000000#define      dManMask          0x00080000//#define    IsItDenorm         0x80000000#define      dIsItDenorm        0x00080000//#define    xIsItSNaN          0x40000000#define      dIsItSNaN          0x00080000#define      dHighMan           0x000FFFFF#define      dFirstBitSet       0x00080000#define      BIAS               0x3FF//#define    GetSign            0x8000#define      dGetSign           0x80000000#define      sGetSign           0x80000000//#define    Infinity(x)       ( x.hex.exponent & ExpMask ) == ExpMask#define      dInfinity(x)      ( x.hex.high & dExpMask ) == dExpMask#define      sInfinity(x)      ( ( x.hexsgl << 1 ) & sExpMask ) == sExpMask      //#define    Exponent(x)       x.hex.exponent & ExpMask#define      dExponent(x)      x.hex.high & dExpMask#define      sExponent(x)      ( ( x.hexsgl << 1 ) & sExpMask )#define      sZero(x)          ( x.hexsgl & sSgnMask ) == 0 //#define    Sign(x)           ( x.hex.exponent & SgnMask ) == SgnMask/********************************************************************************                        Types used in the auxiliary functions.                ********************************************************************************/typedef struct                   /*      Hex representation of a double.      */      {#if defined(__BIG_ENDIAN__)      unsigned long int high;      unsigned long int low;#else      unsigned long int low;      unsigned long int high;#endif      } dHexParts;typedef union      {      unsigned char byties[8];      double dbl;      } DblInHex;//enum boolean { FALSE, TRUE };/********************************************************************************       Macros to access long subfields of a double value.                     ********************************************************************************/#define highpartd(x) *((long *) &x)#define lowpartd(x)  *((long *) &x + 1)enum {  FP_SNAN                       = 0,    /*      signaling NaN      */  FP_QNAN                       = 1,    /*      quiet NaN      */  FP_INFINITE                   = 2,    /*      + or - infinity      */   FP_ZERO                       = 3,    /*      + or - zero      */  FP_NORMAL                     = 4,    /*      all normal numbers       */  FP_SUBNORMAL                  = 5     /*      denormal numbers       */};     
 |