SVF
epd.h
Go to the documentation of this file.
1 
51 #ifndef _EPD
52 #define _EPD
53 
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57 
58 /*---------------------------------------------------------------------------*/
59 /* Constant declarations */
60 /*---------------------------------------------------------------------------*/
61 
62 #define EPD_MAX_BIN 1023
63 #define EPD_MAX_DEC 308
64 #define EPD_EXP_INF 0x7ff
65 
66 /*---------------------------------------------------------------------------*/
67 /* Structure declarations */
68 /*---------------------------------------------------------------------------*/
69 
79 #ifdef EPD_BIG_ENDIAN
80 struct IeeeDoubleStruct { /* BIG_ENDIAN */
81  unsigned int sign: 1;
82  unsigned int exponent: 11;
83  unsigned int mantissa0: 20;
84  unsigned int mantissa1: 32;
85 };
86 #else
87 struct IeeeDoubleStruct { /* LITTLE_ENDIAN */
88  unsigned int mantissa1: 32;
89  unsigned int mantissa0: 20;
90  unsigned int exponent: 11;
91  unsigned int sign: 1;
92 };
93 #endif
94 
104 #ifdef EPD_BIG_ENDIAN
105 struct IeeeNanStruct { /* BIG_ENDIAN */
106  unsigned int sign: 1;
107  unsigned int exponent: 11;
108  unsigned int quiet_bit: 1;
109  unsigned int mantissa0: 19;
110  unsigned int mantissa1: 32;
111 };
112 #else
113 struct IeeeNanStruct { /* LITTLE_ENDIAN */
114  unsigned int mantissa1: 32;
115  unsigned int mantissa0: 19;
116  unsigned int quiet_bit: 1;
117  unsigned int exponent: 11;
118  unsigned int sign: 1;
119 };
120 #endif
121 
131 union EpTypeUnion {
132  double value;
133  struct IeeeDoubleStruct bits;
134  struct IeeeNanStruct nan;
135 };
136 
138  union EpTypeUnion type;
139  int exponent;
140 };
141 
142 /*---------------------------------------------------------------------------*/
143 /* Type declarations */
144 /*---------------------------------------------------------------------------*/
145 typedef struct EpDoubleStruct EpDouble;
147 typedef struct IeeeNanStruct IeeeNan;
148 typedef union EpTypeUnion EpType;
149 
152 /*---------------------------------------------------------------------------*/
153 /* Function prototypes */
154 /*---------------------------------------------------------------------------*/
155 
156 extern EpDouble *EpdAlloc(void);
157 extern int EpdCmp(const char *key1, const char *key2);
158 extern void EpdFree(EpDouble *epd);
159 extern void EpdGetString(EpDouble *epd, char *str);
160 extern void EpdConvert(double value, EpDouble *epd);
161 extern void EpdMultiply(EpDouble *epd1, double value);
162 extern void EpdMultiply2(EpDouble *epd1, EpDouble *epd2);
163 extern void EpdMultiply2Decimal(EpDouble *epd1, EpDouble *epd2);
164 extern void EpdMultiply3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3);
165 extern void EpdMultiply3Decimal(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3);
166 extern void EpdDivide(EpDouble *epd1, double value);
167 extern void EpdDivide2(EpDouble *epd1, EpDouble *epd2);
168 extern void EpdDivide3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3);
169 extern void EpdAdd(EpDouble *epd1, double value);
170 extern void EpdAdd2(EpDouble *epd1, EpDouble *epd2);
171 extern void EpdAdd3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3);
172 extern void EpdSubtract(EpDouble *epd1, double value);
173 extern void EpdSubtract2(EpDouble *epd1, EpDouble *epd2);
174 extern void EpdSubtract3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3);
175 extern void EpdPow2(int n, EpDouble *epd);
176 extern void EpdPow2Decimal(int n, EpDouble *epd);
177 extern void EpdNormalize(EpDouble *epd);
178 extern void EpdNormalizeDecimal(EpDouble *epd);
179 extern void EpdGetValueAndDecimalExponent(EpDouble *epd, double *value, int *exponent);
180 extern int EpdGetExponent(double value);
181 extern int EpdGetExponentDecimal(double value);
182 extern void EpdMakeInf(EpDouble *epd, int sign);
183 extern void EpdMakeZero(EpDouble *epd, int sign);
184 extern void EpdMakeNan(EpDouble *epd);
185 extern void EpdCopy(EpDouble *from, EpDouble *to);
186 extern int EpdIsInf(EpDouble *epd);
187 extern int EpdIsZero(EpDouble *epd);
188 extern int EpdIsNan(EpDouble *epd);
189 extern int EpdIsNanOrInf(EpDouble *epd);
190 extern int IsInfDouble(double value);
191 extern int IsNanDouble(double value);
192 extern int IsNanOrInfDouble(double value);
193 
196 #ifdef __cplusplus
197 }
198 #endif
199 
200 #endif /* _EPD */
int IsNanOrInfDouble(double value)
Definition: epd.c:1332
void EpdMultiply(EpDouble *epd1, double value)
Definition: epd.c:204
double value
Definition: epd.h:132
void EpdDivide(EpDouble *epd1, double value)
Definition: epd.c:385
void EpdFree(EpDouble *epd)
Definition: epd.c:116
int EpdIsNan(EpDouble *epd)
Definition: epd.c:1239
unsigned int sign
Definition: epd.h:91
int EpdIsInf(EpDouble *epd)
Definition: epd.c:1200
unsigned int mantissa1
Definition: epd.h:88
void EpdMultiply2(EpDouble *epd1, EpDouble *epd2)
Definition: epd.c:245
int IsNanDouble(double value)
Definition: epd.c:1304
void EpdMakeInf(EpDouble *epd, int sign)
Definition: epd.c:1114
void EpdMakeNan(EpDouble *epd)
Definition: epd.c:1158
int EpdCmp(const char *key1, const char *key2)
Definition: epd.c:92
unsigned int mantissa0
Definition: epd.h:89
void EpdDivide3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3)
Definition: epd.c:489
int EpdGetExponent(double value)
Definition: epd.c:1067
void EpdGetValueAndDecimalExponent(EpDouble *epd, double *value, int *exponent)
Definition: epd.c:1033
unsigned int exponent
Definition: epd.h:117
unsigned int sign
Definition: epd.h:118
void EpdSubtract(EpDouble *epd1, double value)
Definition: epd.c:725
unsigned int mantissa0
Definition: epd.h:115
int EpdIsZero(EpDouble *epd)
Definition: epd.c:1218
unsigned int quiet_bit
Definition: epd.h:116
void EpdGetString(EpDouble *epd, char *str)
Definition: epd.c:134
void EpdConvert(double value, EpDouble *epd)
Definition: epd.c:184
void EpdAdd2(EpDouble *epd1, EpDouble *epd2)
Definition: epd.c:597
void EpdMultiply3Decimal(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3)
Definition: epd.c:354
void EpdSubtract2(EpDouble *epd1, EpDouble *epd2)
Definition: epd.c:787
int IsInfDouble(double value)
Definition: epd.c:1275
void EpdNormalizeDecimal(EpDouble *epd)
Definition: epd.c:1006
unsigned int exponent
Definition: epd.h:90
void EpdMultiply3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3)
Definition: epd.c:320
void EpdAdd3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3)
Definition: epd.c:659
unsigned int mantissa1
Definition: epd.h:114
void EpdPow2(int n, EpDouble *epd)
Definition: epd.c:916
void EpdPow2Decimal(int n, EpDouble *epd)
Definition: epd.c:945
int EpdIsNanOrInf(EpDouble *epd)
Definition: epd.c:1257
void EpdSubtract3(EpDouble *epd1, EpDouble *epd2, EpDouble *epd3)
Definition: epd.c:849
void EpdNormalize(EpDouble *epd)
Definition: epd.c:976
void EpdMakeZero(EpDouble *epd, int sign)
Definition: epd.c:1136
EpDouble * EpdAlloc(void)
Definition: epd.c:71
int EpdGetExponentDecimal(double value)
Definition: epd.c:1090
int exponent
Definition: epd.h:139
void EpdCopy(EpDouble *from, EpDouble *to)
Definition: epd.c:1181
void EpdDivide2(EpDouble *epd1, EpDouble *epd2)
Definition: epd.c:438
void EpdMultiply2Decimal(EpDouble *epd1, EpDouble *epd2)
Definition: epd.c:284
void EpdAdd(EpDouble *epd1, double value)
Definition: epd.c:535