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