intervals 0.3.56
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.txt +1 -0
- data/ext/crlibm/AUTHORS +2 -0
- data/ext/crlibm/COPYING +504 -0
- data/ext/crlibm/ChangeLog +80 -0
- data/ext/crlibm/INSTALL +182 -0
- data/ext/crlibm/Makefile.am +84 -0
- data/ext/crlibm/Makefile.in +530 -0
- data/ext/crlibm/NEWS +0 -0
- data/ext/crlibm/README +31 -0
- data/ext/crlibm/TODO +47 -0
- data/ext/crlibm/VERSION +1 -0
- data/ext/crlibm/aclocal.m4 +989 -0
- data/ext/crlibm/atan-itanium.c +846 -0
- data/ext/crlibm/atan-pentium.c +261 -0
- data/ext/crlibm/atan_accurate.c +244 -0
- data/ext/crlibm/atan_accurate.h +191 -0
- data/ext/crlibm/atan_fast.c +324 -0
- data/ext/crlibm/atan_fast.h +678 -0
- data/ext/crlibm/config.guess +1461 -0
- data/ext/crlibm/config.sub +1566 -0
- data/ext/crlibm/configure +7517 -0
- data/ext/crlibm/configure.ac +364 -0
- data/ext/crlibm/crlibm.h +125 -0
- data/ext/crlibm/crlibm_config.h +149 -0
- data/ext/crlibm/crlibm_config.h.in +148 -0
- data/ext/crlibm/crlibm_private.c +293 -0
- data/ext/crlibm/crlibm_private.h +658 -0
- data/ext/crlibm/csh_fast.c +631 -0
- data/ext/crlibm/csh_fast.h +771 -0
- data/ext/crlibm/double-extended.h +496 -0
- data/ext/crlibm/exp-td.c +962 -0
- data/ext/crlibm/exp-td.h +685 -0
- data/ext/crlibm/exp_accurate.c +197 -0
- data/ext/crlibm/exp_accurate.h +85 -0
- data/ext/crlibm/gappa/log-de-E0-logir0.gappa +106 -0
- data/ext/crlibm/gappa/log-de-E0.gappa +79 -0
- data/ext/crlibm/gappa/log-de.gappa +81 -0
- data/ext/crlibm/gappa/log-td-E0-logir0.gappa +126 -0
- data/ext/crlibm/gappa/log-td-E0.gappa +143 -0
- data/ext/crlibm/gappa/log-td-accurate-E0-logir0.gappa +230 -0
- data/ext/crlibm/gappa/log-td-accurate-E0.gappa +213 -0
- data/ext/crlibm/gappa/log-td-accurate.gappa +217 -0
- data/ext/crlibm/gappa/log-td.gappa +156 -0
- data/ext/crlibm/gappa/trigoSinCosCase3.gappa +204 -0
- data/ext/crlibm/gappa/trigoTanCase2.gappa +73 -0
- data/ext/crlibm/install-sh +269 -0
- data/ext/crlibm/log-de.c +431 -0
- data/ext/crlibm/log-de.h +732 -0
- data/ext/crlibm/log-td.c +852 -0
- data/ext/crlibm/log-td.h +819 -0
- data/ext/crlibm/log10-td.c +906 -0
- data/ext/crlibm/log10-td.h +823 -0
- data/ext/crlibm/log2-td.c +935 -0
- data/ext/crlibm/log2-td.h +821 -0
- data/ext/crlibm/maple/atan.mpl +359 -0
- data/ext/crlibm/maple/common-procedures.mpl +997 -0
- data/ext/crlibm/maple/csh.mpl +446 -0
- data/ext/crlibm/maple/double-extended.mpl +151 -0
- data/ext/crlibm/maple/exp-td.mpl +195 -0
- data/ext/crlibm/maple/log-de.mpl +243 -0
- data/ext/crlibm/maple/log-td.mpl +316 -0
- data/ext/crlibm/maple/log10-td.mpl +345 -0
- data/ext/crlibm/maple/log2-td.mpl +334 -0
- data/ext/crlibm/maple/trigo.mpl +728 -0
- data/ext/crlibm/maple/triple-double.mpl +58 -0
- data/ext/crlibm/missing +198 -0
- data/ext/crlibm/mkinstalldirs +40 -0
- data/ext/crlibm/rem_pio2_accurate.c +219 -0
- data/ext/crlibm/rem_pio2_accurate.h +53 -0
- data/ext/crlibm/scs_lib/AUTHORS +3 -0
- data/ext/crlibm/scs_lib/COPYING +504 -0
- data/ext/crlibm/scs_lib/ChangeLog +16 -0
- data/ext/crlibm/scs_lib/INSTALL +215 -0
- data/ext/crlibm/scs_lib/Makefile.am +18 -0
- data/ext/crlibm/scs_lib/Makefile.in +328 -0
- data/ext/crlibm/scs_lib/NEWS +0 -0
- data/ext/crlibm/scs_lib/README +9 -0
- data/ext/crlibm/scs_lib/TODO +4 -0
- data/ext/crlibm/scs_lib/addition_scs.c +623 -0
- data/ext/crlibm/scs_lib/config.guess +1461 -0
- data/ext/crlibm/scs_lib/config.sub +1566 -0
- data/ext/crlibm/scs_lib/configure +6226 -0
- data/ext/crlibm/scs_lib/division_scs.c +110 -0
- data/ext/crlibm/scs_lib/double2scs.c +174 -0
- data/ext/crlibm/scs_lib/install-sh +269 -0
- data/ext/crlibm/scs_lib/missing +198 -0
- data/ext/crlibm/scs_lib/mkinstalldirs +40 -0
- data/ext/crlibm/scs_lib/multiplication_scs.c +456 -0
- data/ext/crlibm/scs_lib/poly_fct.c +112 -0
- data/ext/crlibm/scs_lib/print_scs.c +73 -0
- data/ext/crlibm/scs_lib/rand_scs.c +63 -0
- data/ext/crlibm/scs_lib/scs.h +353 -0
- data/ext/crlibm/scs_lib/scs2double.c +391 -0
- data/ext/crlibm/scs_lib/scs2mpf.c +58 -0
- data/ext/crlibm/scs_lib/scs2mpfr.c +61 -0
- data/ext/crlibm/scs_lib/scs_private.c +23 -0
- data/ext/crlibm/scs_lib/scs_private.h +133 -0
- data/ext/crlibm/scs_lib/tests/tbx_timing.h +102 -0
- data/ext/crlibm/scs_lib/wrapper_scs.h +486 -0
- data/ext/crlibm/scs_lib/zero_scs.c +52 -0
- data/ext/crlibm/stamp-h.in +1 -0
- data/ext/crlibm/tests/Makefile.am +43 -0
- data/ext/crlibm/tests/Makefile.in +396 -0
- data/ext/crlibm/tests/blind_test.c +148 -0
- data/ext/crlibm/tests/generate_test_vectors.c +258 -0
- data/ext/crlibm/tests/soak_test.c +334 -0
- data/ext/crlibm/tests/test_common.c +627 -0
- data/ext/crlibm/tests/test_common.h +28 -0
- data/ext/crlibm/tests/test_perf.c +570 -0
- data/ext/crlibm/tests/test_val.c +249 -0
- data/ext/crlibm/trigo_accurate.c +500 -0
- data/ext/crlibm/trigo_accurate.h +331 -0
- data/ext/crlibm/trigo_fast.c +1219 -0
- data/ext/crlibm/trigo_fast.h +639 -0
- data/ext/crlibm/triple-double.h +878 -0
- data/ext/extconf.rb +31 -0
- data/ext/fpu.c +107 -0
- data/ext/jamis-mod.rb +591 -0
- data/lib/fpu.rb +287 -0
- data/lib/interval.rb +1170 -0
- data/lib/intervals.rb +212 -0
- data/lib/struct_float.rb +133 -0
- data/test/data_atan.txt +360 -0
- data/test/data_cos.txt +346 -0
- data/test/data_cosh.txt +3322 -0
- data/test/data_exp.txt +3322 -0
- data/test/data_log.txt +141 -0
- data/test/data_sin.txt +140 -0
- data/test/data_sinh.txt +3322 -0
- data/test/data_tan.txt +342 -0
- metadata +186 -0
@@ -0,0 +1,249 @@
|
|
1
|
+
#include <stdio.h>
|
2
|
+
#include <stdlib.h>
|
3
|
+
#include <string.h>
|
4
|
+
#include <math.h>
|
5
|
+
#include "crlibm.h"
|
6
|
+
#include "crlibm_private.h"
|
7
|
+
#include "test_common.h"
|
8
|
+
|
9
|
+
#ifdef HAVE_MATHLIB_H
|
10
|
+
#include <MathLib.h>
|
11
|
+
#endif
|
12
|
+
|
13
|
+
#ifdef HAVE_MPFR_H
|
14
|
+
#include <gmp.h>
|
15
|
+
#include <mpfr.h>
|
16
|
+
#endif
|
17
|
+
|
18
|
+
/*
|
19
|
+
* TODO: migrate to the getopt() function.
|
20
|
+
*
|
21
|
+
*/
|
22
|
+
|
23
|
+
static void usage(char *fct_name){
|
24
|
+
/*fprintf (stderr, "\n%s: single-value test for crlibm and other mathematical libraries\n", fct_name);*/
|
25
|
+
fprintf (stderr, "\nUsage: %s [-x] function (RN|RU|RD|RZ) value1 [value2]\n", fct_name);
|
26
|
+
fprintf (stderr, " function : name of function to test \n");
|
27
|
+
fprintf (stderr, " (RN|RU|RD|RZ) : rounding mode \n");
|
28
|
+
fprintf (stderr, " value1 : double precision input number (in hexadecimal if option -x is given) \n");
|
29
|
+
fprintf (stderr, " value2 : optional double precision input number (in hexadecimal if option -x is given) \n");
|
30
|
+
exit (1);
|
31
|
+
}
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
int main (int argc, char *argv[])
|
36
|
+
{
|
37
|
+
char* option;
|
38
|
+
char* function_name;
|
39
|
+
char* rounding_mode;
|
40
|
+
double worstcase;
|
41
|
+
int nbarg;
|
42
|
+
|
43
|
+
db_number input, input2, res_crlibm, res_libm;
|
44
|
+
#ifdef HAVE_MPFR_H
|
45
|
+
db_number res_mpfr;
|
46
|
+
mp_rnd_t mpfr_rnd_mode;
|
47
|
+
mpfr_t mp_res, mp_input,mp_input2;
|
48
|
+
#endif
|
49
|
+
#ifdef HAVE_MATHLIB_H
|
50
|
+
db_number res_ibm;
|
51
|
+
#endif
|
52
|
+
#ifdef HAVE_LIBMCR_H
|
53
|
+
db_number res_libmcr;
|
54
|
+
#endif
|
55
|
+
|
56
|
+
/* The random number generator (unused here) */
|
57
|
+
double (*randfun) () = NULL;
|
58
|
+
/* The function we test */
|
59
|
+
double (*testfun_crlibm)() = NULL;
|
60
|
+
/* The function we trust */
|
61
|
+
int (*testfun_mpfr) () = NULL;
|
62
|
+
/* The function to show off against for accuracy */
|
63
|
+
double (*testfun_libm) () = NULL;
|
64
|
+
/* The function to show off against for performance */
|
65
|
+
double (*testfun_libultim) () = NULL;
|
66
|
+
/* The last to join the family */
|
67
|
+
double (*testfun_libmcr) () = NULL;
|
68
|
+
|
69
|
+
nbarg=1;
|
70
|
+
|
71
|
+
function_name = NULL;
|
72
|
+
rounding_mode = NULL;
|
73
|
+
|
74
|
+
if (argc != 4 && argc!=5 && argc!=6) usage(argv[0]);
|
75
|
+
if(argc == 4) {
|
76
|
+
function_name = argv[1];
|
77
|
+
rounding_mode = argv[2];
|
78
|
+
sscanf(argv[3],"%le", &input.d);
|
79
|
+
}
|
80
|
+
if(argc == 5) {
|
81
|
+
option = argv[1];
|
82
|
+
if(strcmp (option, "-x") == 0){
|
83
|
+
function_name = argv[2];
|
84
|
+
rounding_mode = argv[3];
|
85
|
+
sscanf(argv[4],"%llx", &input.l);
|
86
|
+
}else {
|
87
|
+
function_name = argv[1];
|
88
|
+
rounding_mode = argv[2];
|
89
|
+
sscanf(argv[3],"%le", &input.d);
|
90
|
+
sscanf(argv[4],"%le", &input2.d);
|
91
|
+
nbarg=2;
|
92
|
+
}
|
93
|
+
}
|
94
|
+
if(argc == 6) {
|
95
|
+
option = argv[1];
|
96
|
+
if(strcmp (option, "-x") != 0) usage(argv[0]);
|
97
|
+
function_name = argv[2];
|
98
|
+
rounding_mode = argv[3];
|
99
|
+
sscanf(argv[4],"%llx", &input.l);
|
100
|
+
sscanf(argv[5],"%llx", &input2.l);
|
101
|
+
nbarg=2;
|
102
|
+
}
|
103
|
+
|
104
|
+
if ((strcmp (function_name, "pow") == 0)&&(nbarg==1)){
|
105
|
+
fprintf(stderr,"Wrong number of argument");
|
106
|
+
usage(argv[0]);
|
107
|
+
}else {
|
108
|
+
if ((strcmp (function_name, "pow") != 0)&& (nbarg == 2)){
|
109
|
+
fprintf(stderr,"Wrong number of argument");
|
110
|
+
usage(argv[0]);
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
crlibm_init();
|
115
|
+
#ifdef HAVE_MATHLIB_H
|
116
|
+
Init_Lib(); /* we don't save the state, no need here */
|
117
|
+
#endif
|
118
|
+
|
119
|
+
test_init(/* pointers to returned value */
|
120
|
+
&randfun, /* unused */
|
121
|
+
&randfun, /* unused */
|
122
|
+
&testfun_crlibm,
|
123
|
+
&testfun_mpfr,
|
124
|
+
&testfun_libultim,
|
125
|
+
&testfun_libmcr,
|
126
|
+
&testfun_libm,
|
127
|
+
&worstcase,
|
128
|
+
/* arguments */
|
129
|
+
function_name,
|
130
|
+
rounding_mode ) ;
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
#ifdef HAVE_MPFR_H /* stop here if MPFR not present */
|
135
|
+
mpfr_init2(mp_res, 153);
|
136
|
+
mpfr_init2(mp_input, 53);
|
137
|
+
mpfr_init2(mp_input2, 53);
|
138
|
+
if (strcmp(rounding_mode,"RU")==0) mpfr_rnd_mode = GMP_RNDU;
|
139
|
+
else if (strcmp(rounding_mode,"RD")==0) mpfr_rnd_mode = GMP_RNDD;
|
140
|
+
else if (strcmp(rounding_mode,"RZ")==0) mpfr_rnd_mode = GMP_RNDZ;
|
141
|
+
else {
|
142
|
+
mpfr_rnd_mode = GMP_RNDN;
|
143
|
+
rounding_mode="RN" ;
|
144
|
+
}
|
145
|
+
#endif
|
146
|
+
|
147
|
+
|
148
|
+
|
149
|
+
printf("Input1 : %.50e %08x %08x\n", input.d, input.i[HI], input.i[LO] );
|
150
|
+
if (nbarg==2)
|
151
|
+
printf("Input2 : %.50e %08x %08x\n", input2.d, input2.i[HI], input2.i[LO] );
|
152
|
+
|
153
|
+
printf("cr_libm : ");
|
154
|
+
fflush(stdout); /* To help debugging */
|
155
|
+
if(testfun_crlibm != NULL) {
|
156
|
+
if (nbarg==1) res_crlibm.d = testfun_crlibm(input.d);
|
157
|
+
if (nbarg==2) res_crlibm.d = testfun_crlibm(input.d, input2.d);
|
158
|
+
|
159
|
+
printf("%.50e %08x %08x\n",
|
160
|
+
res_crlibm.d,
|
161
|
+
res_crlibm.i[HI],
|
162
|
+
res_crlibm.i[LO] );
|
163
|
+
}else
|
164
|
+
printf("Not available\n");
|
165
|
+
fflush(stdout);
|
166
|
+
|
167
|
+
#ifdef HAVE_MPFR_H
|
168
|
+
printf("mpfr_libm : ");
|
169
|
+
fflush(stdout);
|
170
|
+
if(testfun_mpfr != NULL){
|
171
|
+
mpfr_set_d(mp_input, input.d, GMP_RNDN);
|
172
|
+
|
173
|
+
if (nbarg==1) testfun_mpfr(mp_res, mp_input, mpfr_rnd_mode);
|
174
|
+
if (nbarg==2) {
|
175
|
+
mpfr_set_d(mp_input2, input2.d, GMP_RNDN);
|
176
|
+
testfun_mpfr(mp_res, mp_input, mp_input2, mpfr_rnd_mode);
|
177
|
+
}
|
178
|
+
|
179
|
+
res_mpfr.d = mpfr_get_d(mp_res, mpfr_rnd_mode);
|
180
|
+
printf("%.50e %08x %08x \n",
|
181
|
+
res_mpfr.d,
|
182
|
+
res_mpfr.i[HI],
|
183
|
+
res_mpfr.i[LO] );
|
184
|
+
}else
|
185
|
+
printf("Not available\n");
|
186
|
+
fflush(stdout);
|
187
|
+
#endif
|
188
|
+
|
189
|
+
|
190
|
+
|
191
|
+
#ifdef HAVE_MATHLIB_H
|
192
|
+
printf("libultim : ");
|
193
|
+
fflush(stdout);
|
194
|
+
if(testfun_libultim != NULL) {
|
195
|
+
if (nbarg==1) res_ibm.d = testfun_libultim(input.d);
|
196
|
+
if (nbarg==2) res_ibm.d = testfun_libultim(input.d, input2.d);
|
197
|
+
printf("%.50e %08x %08x \n",
|
198
|
+
res_ibm.d,
|
199
|
+
res_ibm.i[HI],
|
200
|
+
res_ibm.i[LO] );
|
201
|
+
}else
|
202
|
+
printf("Not available\n");
|
203
|
+
fflush(stdout);
|
204
|
+
#endif
|
205
|
+
|
206
|
+
#ifdef HAVE_LIBMCR_H
|
207
|
+
printf("libmcr : ");
|
208
|
+
fflush(stdout);
|
209
|
+
if(testfun_libmcr != NULL) {
|
210
|
+
if (nbarg==1) res_libmcr.d = testfun_libmcr(input.d);
|
211
|
+
if (nbarg==2) res_libmcr.d = testfun_libmcr(input.d, input2.d);
|
212
|
+
printf("%.50e %08x %08x \n",
|
213
|
+
res_libmcr.d,
|
214
|
+
res_libmcr.i[HI],
|
215
|
+
res_libmcr.i[LO] );
|
216
|
+
}else
|
217
|
+
printf("Not available\n");
|
218
|
+
fflush(stdout);
|
219
|
+
#endif
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
/* Last in the list because it segfaults more often than the
|
224
|
+
others. */
|
225
|
+
printf("System libm: ");
|
226
|
+
fflush(stdout);
|
227
|
+
if(testfun_libm != NULL) {
|
228
|
+
if (nbarg==1) res_libm.d = testfun_libm(input.d);
|
229
|
+
if (nbarg==2) res_libm.d = testfun_libm(input.d, input2.d);
|
230
|
+
printf("%.50e %08x %08x \n",
|
231
|
+
res_libm.d,
|
232
|
+
res_libm.i[HI],
|
233
|
+
res_libm.i[LO]) ;
|
234
|
+
}else
|
235
|
+
printf("Not available\n");
|
236
|
+
fflush(stdout);
|
237
|
+
|
238
|
+
/* release memory */
|
239
|
+
#ifdef HAVE_MPFR_H
|
240
|
+
mpfr_clear(mp_input2);
|
241
|
+
mpfr_clear(mp_input);
|
242
|
+
mpfr_clear(mp_res);
|
243
|
+
#endif
|
244
|
+
|
245
|
+
return 0;
|
246
|
+
}
|
247
|
+
|
248
|
+
|
249
|
+
|