00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 #define      NoException            0
00016 
00017 
00018 
00019 
00020 
00021 
00022 #define      dSgnMask           0x80000000
00023 #define      sSgnMask           0x7FFFFFFF
00024 
00025 
00026 #define      dExpMask           0x7FF00000
00027 #define      sExpMask           0xFF000000
00028 
00029                                           
00030 #define      BIG               1.1e+300   
00031 #define      SMALL             1.1e-300   
00032 #define      InfExp            0x7FF
00033 #define      dMaxExp           0x7FF00000
00034 
00035 #define      MaxExpP1          1024
00036 #define      MaxExp            1023
00037 
00038 #define      DenormLimit       -52
00039 
00040 
00041 #define      dManMask          0x00080000
00042 
00043 
00044 #define      dIsItDenorm        0x00080000
00045 
00046 
00047 #define      dIsItSNaN          0x00080000
00048 
00049 #define      dHighMan           0x000FFFFF
00050 #define      dFirstBitSet       0x00080000
00051 #define      BIAS               0x3FF
00052 
00053 
00054 #define      dGetSign           0x80000000
00055 #define      sGetSign           0x80000000
00056 
00057 
00058 #define      dInfinity(x)      ( x.hex.high & dExpMask ) == dExpMask
00059 #define      sInfinity(x)      ( ( x.hexsgl << 1 ) & sExpMask ) == sExpMask      
00060 
00061 
00062 #define      dExponent(x)      x.hex.high & dExpMask
00063 #define      sExponent(x)      ( ( x.hexsgl << 1 ) & sExpMask )
00064 
00065 #define      sZero(x)          ( x.hexsgl & sSgnMask ) == 0 
00066 
00067 
00068 
00069 
00070 
00071 
00072 typedef struct                   
00073       {
00074 #if defined(__BIG_ENDIAN__)
00075       unsigned long int high;
00076       unsigned long int low;
00077 #else
00078       unsigned long int low;
00079       unsigned long int high;
00080 #endif
00081       } dHexParts;
00082 
00083 typedef union
00084       {
00085       unsigned char byties[8];
00086       double dbl;
00087       } DblInHex;
00088 
00089 
00090 
00091 
00092 
00093 
00094 
00095 #define highpartd(x) *((long *) &x)
00096 #define lowpartd(x)  *((long *) &x + 1)
00097 
00098 enum {
00099   FP_SNAN                       = 0,    
00100 
00101   FP_QNAN                       = 1,    
00102 
00103   FP_INFINITE                   = 2,    
00104  
00105   FP_ZERO                       = 3,    
00106 
00107   FP_NORMAL                     = 4,    
00108 
00109   FP_SUBNORMAL                  = 5     
00110 
00111 };     
00112