crmf 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +12 -0
- data/crmf.gemspec +105 -3
- data/ext/crlibm-1.0beta5/AUTHORS +2 -0
- data/ext/crlibm-1.0beta5/CMakeLists.txt +154 -0
- data/ext/crlibm-1.0beta5/COPYING +340 -0
- data/ext/crlibm-1.0beta5/COPYING.LIB +504 -0
- data/ext/crlibm-1.0beta5/ChangeLog +125 -0
- data/ext/crlibm-1.0beta5/Makefile.am +134 -0
- data/ext/crlibm-1.0beta5/NEWS +0 -0
- data/ext/crlibm-1.0beta5/README +31 -0
- data/ext/crlibm-1.0beta5/README.DEV +23 -0
- data/ext/crlibm-1.0beta5/README.md +5 -0
- data/ext/crlibm-1.0beta5/TODO +66 -0
- data/ext/crlibm-1.0beta5/VERSION +1 -0
- data/ext/crlibm-1.0beta5/acos-td.c +1195 -0
- data/ext/crlibm-1.0beta5/acos-td.h +629 -0
- data/ext/crlibm-1.0beta5/asin-td.c +1297 -0
- data/ext/crlibm-1.0beta5/asin-td.h +620 -0
- data/ext/crlibm-1.0beta5/asincos.c +4488 -0
- data/ext/crlibm-1.0beta5/asincos.h +575 -0
- data/ext/crlibm-1.0beta5/atan-itanium.c +846 -0
- data/ext/crlibm-1.0beta5/atan-pentium.c +280 -0
- data/ext/crlibm-1.0beta5/atan-pentium.h +343 -0
- data/ext/crlibm-1.0beta5/atan_accurate.c +341 -0
- data/ext/crlibm-1.0beta5/atan_accurate.h +198 -0
- data/ext/crlibm-1.0beta5/atan_fast.c +506 -0
- data/ext/crlibm-1.0beta5/atan_fast.h +680 -0
- data/ext/crlibm-1.0beta5/configure.ac +419 -0
- data/ext/crlibm-1.0beta5/crlibm.h +204 -0
- data/ext/crlibm-1.0beta5/crlibm.spec +42 -0
- data/ext/crlibm-1.0beta5/crlibm_private.c +397 -0
- data/ext/crlibm-1.0beta5/crlibm_private.h +1048 -0
- data/ext/crlibm-1.0beta5/csh_fast.c +721 -0
- data/ext/crlibm-1.0beta5/csh_fast.h +771 -0
- data/ext/crlibm-1.0beta5/double-extended.h +496 -0
- data/ext/crlibm-1.0beta5/exp-itanium.c +723 -0
- data/ext/crlibm-1.0beta5/exp-td-standalone.c +87 -0
- data/ext/crlibm-1.0beta5/exp-td.c +1363 -0
- data/ext/crlibm-1.0beta5/exp-td.h +685 -0
- data/ext/crlibm-1.0beta5/exp_build_coeffs/exp_fast_table.c +125 -0
- data/ext/crlibm-1.0beta5/expm1-standalone.c +119 -0
- data/ext/crlibm-1.0beta5/expm1.c +2515 -0
- data/ext/crlibm-1.0beta5/expm1.h +715 -0
- data/ext/crlibm-1.0beta5/interval.h +238 -0
- data/ext/crlibm-1.0beta5/log-de.c +480 -0
- data/ext/crlibm-1.0beta5/log-de.h +747 -0
- data/ext/crlibm-1.0beta5/log-de2.c +280 -0
- data/ext/crlibm-1.0beta5/log-de2.h +2352 -0
- data/ext/crlibm-1.0beta5/log-td.c +1158 -0
- data/ext/crlibm-1.0beta5/log-td.h +819 -0
- data/ext/crlibm-1.0beta5/log.c +2244 -0
- data/ext/crlibm-1.0beta5/log.h +1592 -0
- data/ext/crlibm-1.0beta5/log10-td.c +906 -0
- data/ext/crlibm-1.0beta5/log10-td.h +823 -0
- data/ext/crlibm-1.0beta5/log1p.c +1295 -0
- data/ext/crlibm-1.0beta5/log2-td.c +1521 -0
- data/ext/crlibm-1.0beta5/log2-td.h +821 -0
- data/ext/crlibm-1.0beta5/log2_accurate.c +330 -0
- data/ext/crlibm-1.0beta5/log2_accurate.h +261 -0
- data/ext/crlibm-1.0beta5/log_accurate.c +133 -0
- data/ext/crlibm-1.0beta5/log_accurate.h +261 -0
- data/ext/crlibm-1.0beta5/log_fast.c +360 -0
- data/ext/crlibm-1.0beta5/log_fast.h +440 -0
- data/ext/crlibm-1.0beta5/pow.c +1396 -0
- data/ext/crlibm-1.0beta5/pow.h +3101 -0
- data/ext/crlibm-1.0beta5/prepare +20 -0
- data/ext/crlibm-1.0beta5/rem_pio2_accurate.c +219 -0
- data/ext/crlibm-1.0beta5/rem_pio2_accurate.h +53 -0
- data/ext/crlibm-1.0beta5/scs_lib/AUTHORS +3 -0
- data/ext/crlibm-1.0beta5/scs_lib/COPYING +504 -0
- data/ext/crlibm-1.0beta5/scs_lib/ChangeLog +16 -0
- data/ext/crlibm-1.0beta5/scs_lib/Doxyfile.dev +939 -0
- data/ext/crlibm-1.0beta5/scs_lib/Doxyfile.user +939 -0
- data/ext/crlibm-1.0beta5/scs_lib/INSTALL +215 -0
- data/ext/crlibm-1.0beta5/scs_lib/Makefile.am +17 -0
- data/ext/crlibm-1.0beta5/scs_lib/NEWS +0 -0
- data/ext/crlibm-1.0beta5/scs_lib/README +9 -0
- data/ext/crlibm-1.0beta5/scs_lib/README.DEV +38 -0
- data/ext/crlibm-1.0beta5/scs_lib/TODO +4 -0
- data/ext/crlibm-1.0beta5/scs_lib/VERSION +1 -0
- data/ext/crlibm-1.0beta5/scs_lib/addition_scs.c +623 -0
- data/ext/crlibm-1.0beta5/scs_lib/division_scs.c +110 -0
- data/ext/crlibm-1.0beta5/scs_lib/double2scs.c +174 -0
- data/ext/crlibm-1.0beta5/scs_lib/main.dox +104 -0
- data/ext/crlibm-1.0beta5/scs_lib/multiplication_scs.c +339 -0
- data/ext/crlibm-1.0beta5/scs_lib/poly_fct.c +112 -0
- data/ext/crlibm-1.0beta5/scs_lib/print_scs.c +73 -0
- data/ext/crlibm-1.0beta5/scs_lib/rand_scs.c +63 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs.h +353 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs2double.c +411 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs2mpf.c +58 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs2mpfr.c +61 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs_private.c +23 -0
- data/ext/crlibm-1.0beta5/scs_lib/scs_private.h +133 -0
- data/ext/crlibm-1.0beta5/scs_lib/wrapper_scs.h +486 -0
- data/ext/crlibm-1.0beta5/scs_lib/zero_scs.c +52 -0
- data/ext/crlibm-1.0beta5/trigo_accurate.c +501 -0
- data/ext/crlibm-1.0beta5/trigo_accurate.h +331 -0
- data/ext/crlibm-1.0beta5/trigo_fast.c +1243 -0
- data/ext/crlibm-1.0beta5/trigo_fast.h +639 -0
- data/ext/crlibm-1.0beta5/trigpi.c +1169 -0
- data/ext/crlibm-1.0beta5/trigpi.h +556 -0
- data/ext/crlibm-1.0beta5/triple-double.c +57 -0
- data/ext/crlibm-1.0beta5/triple-double.h +1380 -0
- data/ext/crmf/crmf.c +117 -20
- data/ext/crmf/extconf.rb +12 -8
- data/lib/crmf/version.rb +1 -1
- data/tests/perf.rb +100 -219
- metadata +108 -10
- data/ext/crlibm-1.0beta4.tar.gz +0 -0
@@ -0,0 +1,238 @@
|
|
1
|
+
#include "crlibm.h"
|
2
|
+
#include "crlibm_private.h"
|
3
|
+
#include "triple-double.h"
|
4
|
+
|
5
|
+
typedef struct interval { double INF, SUP;} interval ;
|
6
|
+
|
7
|
+
#define LOW(x) x.INF
|
8
|
+
#define UP(x) x.SUP
|
9
|
+
|
10
|
+
#define ASSIGN_LOW(x,e) x.INF=e
|
11
|
+
#define ASSIGN_UP(x,e) x.SUP=e
|
12
|
+
|
13
|
+
#define TRUE (1+1==2)
|
14
|
+
#define FALSE (1+1==3)
|
15
|
+
|
16
|
+
interval j_log();
|
17
|
+
|
18
|
+
#define TEST_AND_COPY_RDRU_LOG(__cond__, __res_rd__, __yh_rd__, __yl_rd__, __res_ru__, __yh_ru__, __yl_ru__, __eps__) \
|
19
|
+
{ \
|
20
|
+
db_number yh_rd, yl_rd, u53_rd, yh_ru, yl_ru, u53_ru; \
|
21
|
+
int yh_rd_neg, yl_rd_neg, yh_ru_neg, yl_ru_neg; \
|
22
|
+
int rd_ok, ru_ok; \
|
23
|
+
double save_res_rd=__res_rd__; \
|
24
|
+
yh_rd.d = __yh_rd__; yl_rd.d = __yl_rd__; \
|
25
|
+
yh_rd_neg = (yh_rd.i[HI] & 0x80000000); \
|
26
|
+
yl_rd_neg = (yl_rd.i[HI] & 0x80000000); \
|
27
|
+
yh_rd.l = yh_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
28
|
+
yl_rd.l = yl_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
29
|
+
u53_rd.l = (yh_rd.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
30
|
+
yh_ru.d = __yh_ru__; yl_ru.d = __yl_ru__; \
|
31
|
+
yh_ru_neg = (yh_ru.i[HI] & 0x80000000); \
|
32
|
+
yl_ru_neg = (yl_ru.i[HI] & 0x80000000); \
|
33
|
+
yh_ru.l = yh_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
34
|
+
yl_ru.l = yl_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
35
|
+
u53_ru.l = (yh_ru.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
36
|
+
__cond__ = 0; \
|
37
|
+
rd_ok=(yl_rd.d > __eps__ * u53_rd.d); \
|
38
|
+
ru_ok=(yl_ru.d > __eps__ * u53_ru.d); \
|
39
|
+
if(yl_rd_neg) { /* The case yl==0 is filtered by the above test*/ \
|
40
|
+
/* return next down */ \
|
41
|
+
yh_rd.d = __yh_rd__; \
|
42
|
+
if(yh_rd_neg) yh_rd.l++; else yh_rd.l--; /* Beware: fails for zero */ \
|
43
|
+
__res_rd__ = yh_rd.d ; \
|
44
|
+
} \
|
45
|
+
else { \
|
46
|
+
__res_rd__ = __yh_rd__; \
|
47
|
+
} \
|
48
|
+
if(!yl_ru_neg) { /* The case yl==0 is filtered by the above test*/ \
|
49
|
+
/* return next up */ \
|
50
|
+
yh_ru.d = __yh_ru__; \
|
51
|
+
if(yh_ru_neg) yh_ru.l--; else yh_ru.l++; /* Beware: fails for zero */ \
|
52
|
+
__res_ru__ = yh_ru.d ; \
|
53
|
+
} \
|
54
|
+
else { \
|
55
|
+
__res_ru__ = __yh_ru__; \
|
56
|
+
} \
|
57
|
+
if(save_res_rd==-1.0/0.0) __res_rd__=-1.0/0.0; \
|
58
|
+
if(rd_ok && ru_ok){\
|
59
|
+
interval _res; \
|
60
|
+
ASSIGN_LOW(_res,__res_rd__); \
|
61
|
+
ASSIGN_UP(_res,__res_ru__); \
|
62
|
+
return(_res); \
|
63
|
+
} \
|
64
|
+
else if (rd_ok){\
|
65
|
+
__cond__=1; \
|
66
|
+
}\
|
67
|
+
else if (ru_ok){\
|
68
|
+
__cond__=2; \
|
69
|
+
}\
|
70
|
+
}
|
71
|
+
|
72
|
+
#define TEST_AND_COPY_RDRU_EXP(__cond__, cond1, cond2, __res_rd__, __yh_rd__, __yl_rd__, __res_ru__, __yh_ru__, __yl_ru__, __eps__) \
|
73
|
+
{ \
|
74
|
+
db_number yh_rd, yl_rd, u53_rd, yh_ru, yl_ru, u53_ru; \
|
75
|
+
int yh_rd_neg, yl_rd_neg, yh_ru_neg, yl_ru_neg; \
|
76
|
+
int rd_ok, ru_ok; \
|
77
|
+
double save_res_rd=__res_rd__; \
|
78
|
+
double save_res_ru=__res_ru__; \
|
79
|
+
yh_rd.d = __yh_rd__; yl_rd.d = __yl_rd__; \
|
80
|
+
yh_rd_neg = (yh_rd.i[HI] & 0x80000000); \
|
81
|
+
yl_rd_neg = (yl_rd.i[HI] & 0x80000000); \
|
82
|
+
yh_rd.l = yh_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
83
|
+
yl_rd.l = yl_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
84
|
+
u53_rd.l = (yh_rd.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
85
|
+
yh_ru.d = __yh_ru__; yl_ru.d = __yl_ru__; \
|
86
|
+
yh_ru_neg = (yh_ru.i[HI] & 0x80000000); \
|
87
|
+
yl_ru_neg = (yl_ru.i[HI] & 0x80000000); \
|
88
|
+
yh_ru.l = yh_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
89
|
+
yl_ru.l = yl_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
90
|
+
u53_ru.l = (yh_ru.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
91
|
+
__cond__ = 0; \
|
92
|
+
rd_ok=(yl_rd.d > __eps__ * u53_rd.d); \
|
93
|
+
ru_ok=(yl_ru.d > __eps__ * u53_ru.d); \
|
94
|
+
if(yl_rd_neg) { /* The case yl==0 is filtered by the above test*/ \
|
95
|
+
/* return next down */ \
|
96
|
+
yh_rd.d = __yh_rd__; \
|
97
|
+
if(yh_rd_neg) yh_rd.l++; else yh_rd.l--; /* Beware: fails for zero */ \
|
98
|
+
__res_rd__ = yh_rd.d ; \
|
99
|
+
} \
|
100
|
+
else { \
|
101
|
+
__res_rd__ = __yh_rd__; \
|
102
|
+
} \
|
103
|
+
if(!yl_ru_neg) { /* The case yl==0 is filtered by the above test*/ \
|
104
|
+
/* return next up */ \
|
105
|
+
yh_ru.d = __yh_ru__; \
|
106
|
+
if(yh_ru_neg) yh_ru.l--; else yh_ru.l++; /* Beware: fails for zero */ \
|
107
|
+
__res_ru__ = yh_ru.d ; \
|
108
|
+
} \
|
109
|
+
else { \
|
110
|
+
__res_ru__ = __yh_ru__; \
|
111
|
+
} \
|
112
|
+
if(cond1) __res_rd__=save_res_rd; \
|
113
|
+
if(cond2) __res_ru__=save_res_ru; \
|
114
|
+
if(rd_ok && ru_ok){\
|
115
|
+
__cond__=3; \
|
116
|
+
} \
|
117
|
+
else if (rd_ok){\
|
118
|
+
__cond__=1; \
|
119
|
+
}\
|
120
|
+
else if (ru_ok){\
|
121
|
+
__cond__=2; \
|
122
|
+
}\
|
123
|
+
}
|
124
|
+
|
125
|
+
|
126
|
+
#define TEST_AND_COPY_RDRU_EXPM1(__cond__, __res_rd__, __yh_rd__, __yl_rd__, __res_ru__, __yh_ru__, __yl_ru__, __eps__) \
|
127
|
+
{ \
|
128
|
+
db_number yh_rd, yl_rd, u53_rd, yh_ru, yl_ru, u53_ru; \
|
129
|
+
int yh_rd_neg, yl_rd_neg, yh_ru_neg, yl_ru_neg; \
|
130
|
+
int rd_ok, ru_ok; \
|
131
|
+
yh_rd.d = __yh_rd__; yl_rd.d = __yl_rd__; \
|
132
|
+
yh_rd_neg = (yh_rd.i[HI] & 0x80000000); \
|
133
|
+
yl_rd_neg = (yl_rd.i[HI] & 0x80000000); \
|
134
|
+
yh_rd.l = yh_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
135
|
+
yl_rd.l = yl_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
136
|
+
u53_rd.l = (yh_rd.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
137
|
+
yh_ru.d = __yh_ru__; yl_ru.d = __yl_ru__; \
|
138
|
+
yh_ru_neg = (yh_ru.i[HI] & 0x80000000); \
|
139
|
+
yl_ru_neg = (yl_ru.i[HI] & 0x80000000); \
|
140
|
+
yh_ru.l = yh_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
141
|
+
yl_ru.l = yl_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
142
|
+
u53_ru.l = (yh_ru.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
143
|
+
__cond__ = 0; \
|
144
|
+
rd_ok=(yl_rd.d > __eps__ * u53_rd.d); \
|
145
|
+
ru_ok=(yl_ru.d > __eps__ * u53_ru.d); \
|
146
|
+
if(yl_rd_neg) { /* The case yl==0 is filtered by the above test*/ \
|
147
|
+
/* return next down */ \
|
148
|
+
yh_rd.d = __yh_rd__; \
|
149
|
+
if(yh_rd_neg) yh_rd.l++; else yh_rd.l--; /* Beware: fails for zero */ \
|
150
|
+
__res_rd__ = yh_rd.d ; \
|
151
|
+
} \
|
152
|
+
else { \
|
153
|
+
__res_rd__ = __yh_rd__; \
|
154
|
+
} \
|
155
|
+
if(!yl_ru_neg) { /* The case yl==0 is filtered by the above test*/ \
|
156
|
+
/* return next up */ \
|
157
|
+
yh_ru.d = __yh_ru__; \
|
158
|
+
if(yh_ru_neg) yh_ru.l--; else yh_ru.l++; /* Beware: fails for zero */ \
|
159
|
+
__res_ru__ = yh_ru.d ; \
|
160
|
+
} \
|
161
|
+
else { \
|
162
|
+
__res_ru__ = __yh_ru__; \
|
163
|
+
} \
|
164
|
+
if(rd_ok && ru_ok){\
|
165
|
+
interval _res; \
|
166
|
+
ASSIGN_LOW(_res,__res_rd__); \
|
167
|
+
ASSIGN_UP(_res,__res_ru__); \
|
168
|
+
return(_res); \
|
169
|
+
} \
|
170
|
+
else if (rd_ok){\
|
171
|
+
__cond__=1; \
|
172
|
+
}\
|
173
|
+
else if (ru_ok){\
|
174
|
+
__cond__=2; \
|
175
|
+
}\
|
176
|
+
}
|
177
|
+
|
178
|
+
#define TEST_AND_COPY_RDRU_LOG2(__cond__, __res_rd__, __yh_rd__, __yl_rd__, __res_ru__, __yh_ru__, __yl_ru__, __eps_rd__, __eps_ru__) \
|
179
|
+
{ \
|
180
|
+
db_number yh_rd, yl_rd, u53_rd, yh_ru, yl_ru, u53_ru; \
|
181
|
+
int yh_rd_neg, yl_rd_neg, yh_ru_neg, yl_ru_neg; \
|
182
|
+
int rd_ok, ru_ok; \
|
183
|
+
yh_rd.d = __yh_rd__; yl_rd.d = __yl_rd__; \
|
184
|
+
yh_rd_neg = (yh_rd.i[HI] & 0x80000000); \
|
185
|
+
yl_rd_neg = (yl_rd.i[HI] & 0x80000000); \
|
186
|
+
yh_rd.l = yh_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
187
|
+
yl_rd.l = yl_rd.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
188
|
+
u53_rd.l = (yh_rd.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
189
|
+
yh_ru.d = __yh_ru__; yl_ru.d = __yl_ru__; \
|
190
|
+
yh_ru_neg = (yh_ru.i[HI] & 0x80000000); \
|
191
|
+
yl_ru_neg = (yl_ru.i[HI] & 0x80000000); \
|
192
|
+
yh_ru.l = yh_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
193
|
+
yl_ru.l = yl_ru.l & 0x7fffffffffffffffLL; /* compute the absolute value*/ \
|
194
|
+
u53_ru.l = (yh_ru.l & ULL(7ff0000000000000)) + ULL(0010000000000000); \
|
195
|
+
__cond__ = 0; \
|
196
|
+
rd_ok=(yl_rd.d > __eps_rd__ * u53_rd.d); \
|
197
|
+
ru_ok=(yl_ru.d > __eps_ru__ * u53_ru.d); \
|
198
|
+
if(yl_rd_neg) { /* The case yl==0 is filtered by the above test*/ \
|
199
|
+
/* return next down */ \
|
200
|
+
yh_rd.d = __yh_rd__; \
|
201
|
+
if(yh_rd_neg) yh_rd.l++; else yh_rd.l--; /* Beware: fails for zero */ \
|
202
|
+
__res_rd__ = yh_rd.d ; \
|
203
|
+
} \
|
204
|
+
else { \
|
205
|
+
__res_rd__ = __yh_rd__; \
|
206
|
+
} \
|
207
|
+
if(!yl_ru_neg) { /* The case yl==0 is filtered by the above test*/ \
|
208
|
+
/* return next up */ \
|
209
|
+
yh_ru.d = __yh_ru__; \
|
210
|
+
if(yh_ru_neg) yh_ru.l--; else yh_ru.l++; /* Beware: fails for zero */ \
|
211
|
+
__res_ru__ = yh_ru.d ; \
|
212
|
+
} \
|
213
|
+
else { \
|
214
|
+
__res_ru__ = __yh_ru__; \
|
215
|
+
} \
|
216
|
+
if(rd_ok && ru_ok){\
|
217
|
+
interval _res; \
|
218
|
+
ASSIGN_LOW(_res,__res_rd__); \
|
219
|
+
ASSIGN_UP(_res,__res_ru__); \
|
220
|
+
return(_res); \
|
221
|
+
} \
|
222
|
+
else if (rd_ok){\
|
223
|
+
__cond__=1; \
|
224
|
+
}\
|
225
|
+
else if (ru_ok){\
|
226
|
+
__cond__=2; \
|
227
|
+
}\
|
228
|
+
}
|
229
|
+
|
230
|
+
|
231
|
+
#define RETURN_EMPTY_INTERVAL \
|
232
|
+
{ \
|
233
|
+
interval res; \
|
234
|
+
ASSIGN_LOW(res,0.0/0.0); \
|
235
|
+
ASSIGN_UP(res,0.0/0.0); \
|
236
|
+
return res; \
|
237
|
+
}
|
238
|
+
|