Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _FLOATPLUS_H
00022 #define _FLOATPLUS_H
00023
00024 #include <float.h>
00025 #include <limits.h>
00026
00027
00028
00029 #if FLT_RADIX == 2
00030 # define FLT_MANT_BIT FLT_MANT_DIG
00031 # define DBL_MANT_BIT DBL_MANT_DIG
00032 # define LDBL_MANT_BIT LDBL_MANT_DIG
00033 #elif FLT_RADIX == 4
00034 # define FLT_MANT_BIT (FLT_MANT_DIG * 2)
00035 # define DBL_MANT_BIT (DBL_MANT_DIG * 2)
00036 # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2)
00037 #elif FLT_RADIX == 16
00038 # define FLT_MANT_BIT (FLT_MANT_DIG * 4)
00039 # define DBL_MANT_BIT (DBL_MANT_DIG * 4)
00040 # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4)
00041 #endif
00042
00043
00044 #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7)
00045 #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7)
00046 #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7)
00047
00048
00049
00050 #define FLT_EXP_BIT \
00051 (FLT_EXP_MASK < 0x100 ? 8 : \
00052 FLT_EXP_MASK < 0x200 ? 9 : \
00053 FLT_EXP_MASK < 0x400 ? 10 : \
00054 FLT_EXP_MASK < 0x800 ? 11 : \
00055 FLT_EXP_MASK < 0x1000 ? 12 : \
00056 FLT_EXP_MASK < 0x2000 ? 13 : \
00057 FLT_EXP_MASK < 0x4000 ? 14 : \
00058 FLT_EXP_MASK < 0x8000 ? 15 : \
00059 FLT_EXP_MASK < 0x10000 ? 16 : \
00060 FLT_EXP_MASK < 0x20000 ? 17 : \
00061 FLT_EXP_MASK < 0x40000 ? 18 : \
00062 FLT_EXP_MASK < 0x80000 ? 19 : \
00063 FLT_EXP_MASK < 0x100000 ? 20 : \
00064 FLT_EXP_MASK < 0x200000 ? 21 : \
00065 FLT_EXP_MASK < 0x400000 ? 22 : \
00066 FLT_EXP_MASK < 0x800000 ? 23 : \
00067 FLT_EXP_MASK < 0x1000000 ? 24 : \
00068 FLT_EXP_MASK < 0x2000000 ? 25 : \
00069 FLT_EXP_MASK < 0x4000000 ? 26 : \
00070 FLT_EXP_MASK < 0x8000000 ? 27 : \
00071 FLT_EXP_MASK < 0x10000000 ? 28 : \
00072 FLT_EXP_MASK < 0x20000000 ? 29 : \
00073 FLT_EXP_MASK < 0x40000000 ? 30 : \
00074 FLT_EXP_MASK <= 0x7fffffff ? 31 : \
00075 32)
00076 #define DBL_EXP_BIT \
00077 (DBL_EXP_MASK < 0x100 ? 8 : \
00078 DBL_EXP_MASK < 0x200 ? 9 : \
00079 DBL_EXP_MASK < 0x400 ? 10 : \
00080 DBL_EXP_MASK < 0x800 ? 11 : \
00081 DBL_EXP_MASK < 0x1000 ? 12 : \
00082 DBL_EXP_MASK < 0x2000 ? 13 : \
00083 DBL_EXP_MASK < 0x4000 ? 14 : \
00084 DBL_EXP_MASK < 0x8000 ? 15 : \
00085 DBL_EXP_MASK < 0x10000 ? 16 : \
00086 DBL_EXP_MASK < 0x20000 ? 17 : \
00087 DBL_EXP_MASK < 0x40000 ? 18 : \
00088 DBL_EXP_MASK < 0x80000 ? 19 : \
00089 DBL_EXP_MASK < 0x100000 ? 20 : \
00090 DBL_EXP_MASK < 0x200000 ? 21 : \
00091 DBL_EXP_MASK < 0x400000 ? 22 : \
00092 DBL_EXP_MASK < 0x800000 ? 23 : \
00093 DBL_EXP_MASK < 0x1000000 ? 24 : \
00094 DBL_EXP_MASK < 0x2000000 ? 25 : \
00095 DBL_EXP_MASK < 0x4000000 ? 26 : \
00096 DBL_EXP_MASK < 0x8000000 ? 27 : \
00097 DBL_EXP_MASK < 0x10000000 ? 28 : \
00098 DBL_EXP_MASK < 0x20000000 ? 29 : \
00099 DBL_EXP_MASK < 0x40000000 ? 30 : \
00100 DBL_EXP_MASK <= 0x7fffffff ? 31 : \
00101 32)
00102 #define LDBL_EXP_BIT \
00103 (LDBL_EXP_MASK < 0x100 ? 8 : \
00104 LDBL_EXP_MASK < 0x200 ? 9 : \
00105 LDBL_EXP_MASK < 0x400 ? 10 : \
00106 LDBL_EXP_MASK < 0x800 ? 11 : \
00107 LDBL_EXP_MASK < 0x1000 ? 12 : \
00108 LDBL_EXP_MASK < 0x2000 ? 13 : \
00109 LDBL_EXP_MASK < 0x4000 ? 14 : \
00110 LDBL_EXP_MASK < 0x8000 ? 15 : \
00111 LDBL_EXP_MASK < 0x10000 ? 16 : \
00112 LDBL_EXP_MASK < 0x20000 ? 17 : \
00113 LDBL_EXP_MASK < 0x40000 ? 18 : \
00114 LDBL_EXP_MASK < 0x80000 ? 19 : \
00115 LDBL_EXP_MASK < 0x100000 ? 20 : \
00116 LDBL_EXP_MASK < 0x200000 ? 21 : \
00117 LDBL_EXP_MASK < 0x400000 ? 22 : \
00118 LDBL_EXP_MASK < 0x800000 ? 23 : \
00119 LDBL_EXP_MASK < 0x1000000 ? 24 : \
00120 LDBL_EXP_MASK < 0x2000000 ? 25 : \
00121 LDBL_EXP_MASK < 0x4000000 ? 26 : \
00122 LDBL_EXP_MASK < 0x8000000 ? 27 : \
00123 LDBL_EXP_MASK < 0x10000000 ? 28 : \
00124 LDBL_EXP_MASK < 0x20000000 ? 29 : \
00125 LDBL_EXP_MASK < 0x40000000 ? 30 : \
00126 LDBL_EXP_MASK <= 0x7fffffff ? 31 : \
00127 32)
00128
00129
00130
00131
00132 #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1)
00133 #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1)
00134 #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1)
00135
00136
00137
00138
00139
00140
00141 #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
00142 #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
00143 #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
00144
00145
00146 typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1];
00147 typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1];
00148 typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1];
00149
00150 #endif