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.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -0
  3. data/crmf.gemspec +105 -3
  4. data/ext/crlibm-1.0beta5/AUTHORS +2 -0
  5. data/ext/crlibm-1.0beta5/CMakeLists.txt +154 -0
  6. data/ext/crlibm-1.0beta5/COPYING +340 -0
  7. data/ext/crlibm-1.0beta5/COPYING.LIB +504 -0
  8. data/ext/crlibm-1.0beta5/ChangeLog +125 -0
  9. data/ext/crlibm-1.0beta5/Makefile.am +134 -0
  10. data/ext/crlibm-1.0beta5/NEWS +0 -0
  11. data/ext/crlibm-1.0beta5/README +31 -0
  12. data/ext/crlibm-1.0beta5/README.DEV +23 -0
  13. data/ext/crlibm-1.0beta5/README.md +5 -0
  14. data/ext/crlibm-1.0beta5/TODO +66 -0
  15. data/ext/crlibm-1.0beta5/VERSION +1 -0
  16. data/ext/crlibm-1.0beta5/acos-td.c +1195 -0
  17. data/ext/crlibm-1.0beta5/acos-td.h +629 -0
  18. data/ext/crlibm-1.0beta5/asin-td.c +1297 -0
  19. data/ext/crlibm-1.0beta5/asin-td.h +620 -0
  20. data/ext/crlibm-1.0beta5/asincos.c +4488 -0
  21. data/ext/crlibm-1.0beta5/asincos.h +575 -0
  22. data/ext/crlibm-1.0beta5/atan-itanium.c +846 -0
  23. data/ext/crlibm-1.0beta5/atan-pentium.c +280 -0
  24. data/ext/crlibm-1.0beta5/atan-pentium.h +343 -0
  25. data/ext/crlibm-1.0beta5/atan_accurate.c +341 -0
  26. data/ext/crlibm-1.0beta5/atan_accurate.h +198 -0
  27. data/ext/crlibm-1.0beta5/atan_fast.c +506 -0
  28. data/ext/crlibm-1.0beta5/atan_fast.h +680 -0
  29. data/ext/crlibm-1.0beta5/configure.ac +419 -0
  30. data/ext/crlibm-1.0beta5/crlibm.h +204 -0
  31. data/ext/crlibm-1.0beta5/crlibm.spec +42 -0
  32. data/ext/crlibm-1.0beta5/crlibm_private.c +397 -0
  33. data/ext/crlibm-1.0beta5/crlibm_private.h +1048 -0
  34. data/ext/crlibm-1.0beta5/csh_fast.c +721 -0
  35. data/ext/crlibm-1.0beta5/csh_fast.h +771 -0
  36. data/ext/crlibm-1.0beta5/double-extended.h +496 -0
  37. data/ext/crlibm-1.0beta5/exp-itanium.c +723 -0
  38. data/ext/crlibm-1.0beta5/exp-td-standalone.c +87 -0
  39. data/ext/crlibm-1.0beta5/exp-td.c +1363 -0
  40. data/ext/crlibm-1.0beta5/exp-td.h +685 -0
  41. data/ext/crlibm-1.0beta5/exp_build_coeffs/exp_fast_table.c +125 -0
  42. data/ext/crlibm-1.0beta5/expm1-standalone.c +119 -0
  43. data/ext/crlibm-1.0beta5/expm1.c +2515 -0
  44. data/ext/crlibm-1.0beta5/expm1.h +715 -0
  45. data/ext/crlibm-1.0beta5/interval.h +238 -0
  46. data/ext/crlibm-1.0beta5/log-de.c +480 -0
  47. data/ext/crlibm-1.0beta5/log-de.h +747 -0
  48. data/ext/crlibm-1.0beta5/log-de2.c +280 -0
  49. data/ext/crlibm-1.0beta5/log-de2.h +2352 -0
  50. data/ext/crlibm-1.0beta5/log-td.c +1158 -0
  51. data/ext/crlibm-1.0beta5/log-td.h +819 -0
  52. data/ext/crlibm-1.0beta5/log.c +2244 -0
  53. data/ext/crlibm-1.0beta5/log.h +1592 -0
  54. data/ext/crlibm-1.0beta5/log10-td.c +906 -0
  55. data/ext/crlibm-1.0beta5/log10-td.h +823 -0
  56. data/ext/crlibm-1.0beta5/log1p.c +1295 -0
  57. data/ext/crlibm-1.0beta5/log2-td.c +1521 -0
  58. data/ext/crlibm-1.0beta5/log2-td.h +821 -0
  59. data/ext/crlibm-1.0beta5/log2_accurate.c +330 -0
  60. data/ext/crlibm-1.0beta5/log2_accurate.h +261 -0
  61. data/ext/crlibm-1.0beta5/log_accurate.c +133 -0
  62. data/ext/crlibm-1.0beta5/log_accurate.h +261 -0
  63. data/ext/crlibm-1.0beta5/log_fast.c +360 -0
  64. data/ext/crlibm-1.0beta5/log_fast.h +440 -0
  65. data/ext/crlibm-1.0beta5/pow.c +1396 -0
  66. data/ext/crlibm-1.0beta5/pow.h +3101 -0
  67. data/ext/crlibm-1.0beta5/prepare +20 -0
  68. data/ext/crlibm-1.0beta5/rem_pio2_accurate.c +219 -0
  69. data/ext/crlibm-1.0beta5/rem_pio2_accurate.h +53 -0
  70. data/ext/crlibm-1.0beta5/scs_lib/AUTHORS +3 -0
  71. data/ext/crlibm-1.0beta5/scs_lib/COPYING +504 -0
  72. data/ext/crlibm-1.0beta5/scs_lib/ChangeLog +16 -0
  73. data/ext/crlibm-1.0beta5/scs_lib/Doxyfile.dev +939 -0
  74. data/ext/crlibm-1.0beta5/scs_lib/Doxyfile.user +939 -0
  75. data/ext/crlibm-1.0beta5/scs_lib/INSTALL +215 -0
  76. data/ext/crlibm-1.0beta5/scs_lib/Makefile.am +17 -0
  77. data/ext/crlibm-1.0beta5/scs_lib/NEWS +0 -0
  78. data/ext/crlibm-1.0beta5/scs_lib/README +9 -0
  79. data/ext/crlibm-1.0beta5/scs_lib/README.DEV +38 -0
  80. data/ext/crlibm-1.0beta5/scs_lib/TODO +4 -0
  81. data/ext/crlibm-1.0beta5/scs_lib/VERSION +1 -0
  82. data/ext/crlibm-1.0beta5/scs_lib/addition_scs.c +623 -0
  83. data/ext/crlibm-1.0beta5/scs_lib/division_scs.c +110 -0
  84. data/ext/crlibm-1.0beta5/scs_lib/double2scs.c +174 -0
  85. data/ext/crlibm-1.0beta5/scs_lib/main.dox +104 -0
  86. data/ext/crlibm-1.0beta5/scs_lib/multiplication_scs.c +339 -0
  87. data/ext/crlibm-1.0beta5/scs_lib/poly_fct.c +112 -0
  88. data/ext/crlibm-1.0beta5/scs_lib/print_scs.c +73 -0
  89. data/ext/crlibm-1.0beta5/scs_lib/rand_scs.c +63 -0
  90. data/ext/crlibm-1.0beta5/scs_lib/scs.h +353 -0
  91. data/ext/crlibm-1.0beta5/scs_lib/scs2double.c +411 -0
  92. data/ext/crlibm-1.0beta5/scs_lib/scs2mpf.c +58 -0
  93. data/ext/crlibm-1.0beta5/scs_lib/scs2mpfr.c +61 -0
  94. data/ext/crlibm-1.0beta5/scs_lib/scs_private.c +23 -0
  95. data/ext/crlibm-1.0beta5/scs_lib/scs_private.h +133 -0
  96. data/ext/crlibm-1.0beta5/scs_lib/wrapper_scs.h +486 -0
  97. data/ext/crlibm-1.0beta5/scs_lib/zero_scs.c +52 -0
  98. data/ext/crlibm-1.0beta5/trigo_accurate.c +501 -0
  99. data/ext/crlibm-1.0beta5/trigo_accurate.h +331 -0
  100. data/ext/crlibm-1.0beta5/trigo_fast.c +1243 -0
  101. data/ext/crlibm-1.0beta5/trigo_fast.h +639 -0
  102. data/ext/crlibm-1.0beta5/trigpi.c +1169 -0
  103. data/ext/crlibm-1.0beta5/trigpi.h +556 -0
  104. data/ext/crlibm-1.0beta5/triple-double.c +57 -0
  105. data/ext/crlibm-1.0beta5/triple-double.h +1380 -0
  106. data/ext/crmf/crmf.c +117 -20
  107. data/ext/crmf/extconf.rb +12 -8
  108. data/lib/crmf/version.rb +1 -1
  109. data/tests/perf.rb +100 -219
  110. metadata +108 -10
  111. data/ext/crlibm-1.0beta4.tar.gz +0 -0
@@ -0,0 +1,341 @@
1
+ /*
2
+ * Correctly rounded arctangent
3
+ *
4
+ * Author : Nicolas Gast (Ecole Normale Superieure), Florent de Dinechin
5
+ *
6
+ * This file is part of the crlibm library developed by the Arenaire
7
+ * project at Ecole Normale Superieure de Lyon
8
+ *
9
+ * This program is free software; you can redistribute it and/or modify
10
+ * it under the terms of the GNU Lesser General Public License as published by
11
+ * the Free Software Foundation; either version 2 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU Lesser General Public License
20
+ * along with this program; if not, write to the Free Software
21
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
+ */
23
+ #include <stdio.h>
24
+ #include <stdlib.h>
25
+ #include "crlibm_private.h"
26
+ #include "atan_accurate.h"
27
+ #include "atan_fast.h"
28
+
29
+
30
+ /*
31
+ * WHAT WE CAN DO :
32
+ *
33
+ * 1) Range reduction
34
+ *
35
+ * x > 0 because atan(-x) = - atan(x)
36
+ *
37
+ * we have built 50 intervals I(i), associated to a b(i) so that :
38
+ *
39
+ * For every x :
40
+ *
41
+ * we find the interval I(i) , as atan(x) = atan(b(i)) + atan( (x - b(i)) / (1 + x * b(i)) )
42
+ *
43
+ * so that X = (x - b(i)) / (1 + x * b(i)) be in interval [ -2^(-6) , 2^(-6) ]
44
+ * There is no cancellation because :
45
+ * for every x in [ -2^(-6) , 2^(-6) ],
46
+ *
47
+ * atan(x) <= 0.01562372862 in binary 0.000001111111111
48
+ * AND for the smallest b(i) atan(b(i)) = 0.04687118592 in binary 0.00001011111111
49
+ *
50
+ *
51
+ * 2) Polynomial evaluation of atan(X), atan(b(i)) is tabulated.
52
+ *
53
+ * (-???)
54
+ * Approximation error: |err| < 2^
55
+ *
56
+ *
57
+ * 3) Reconstruction:
58
+ *
59
+ * atan(x) = atan(b(i)) + atan(X)
60
+ *
61
+ *
62
+ * 4) Rounding:
63
+ *
64
+ * when |x| is too big, the result is always sign(x) * Pi/2,
65
+ * because Pi/2 is appromated by the biggest value smallest than Pi/2,
66
+ * in order not to have an atan > Pi/2.
67
+ */
68
+
69
+
70
+
71
+
72
+ static void scs_atan(scs_ptr res_scs, scs_ptr x){
73
+ scs_t X_scs, denom1_scs, denom2_scs, poly_scs, X2;
74
+ scs_t atanbhihi,atanbhilo, atanblo, atanbhi, atanb;
75
+ scs_t bsc_ptr;
76
+ db_number db;
77
+ double test;
78
+ int k, i=31;
79
+
80
+
81
+ scs_get_d(&db.d, x);
82
+
83
+ #if EVAL_PERF
84
+ crlibm_second_step_taken++;
85
+ #endif
86
+
87
+ /* test if x as to be reduced */
88
+ if (db.d > MIN_REDUCTION_NEEDED) {
89
+ /* Compute i so that x E [a[i],a[i+1]] */
90
+ if (db.d < arctan_table[i][A].d) i-= 16;
91
+ else i+=16;
92
+ if (db.d < arctan_table[i][A].d) i-= 8;
93
+ else i+= 8;
94
+ if (db.d < arctan_table[i][A].d) i-= 4;
95
+ else i+= 4;
96
+ if (db.d < arctan_table[i][A].d) i-= 2;
97
+ else i+= 2;
98
+ if (db.d < arctan_table[i][A].d) i-= 1;
99
+ else if (i<61) i+= 1;
100
+ if (db.d < arctan_table[i][A].d) i-= 1;
101
+
102
+ /* evaluate X = (x - b(i)) / (1 + x*b(i)) */
103
+ scs_set_d(bsc_ptr, arctan_table[i][B].d);
104
+
105
+ scs_mul(denom1_scs,bsc_ptr,x);
106
+ scs_add(denom2_scs,denom1_scs,SCS_ONE);
107
+ scs_sub(X_scs,x,bsc_ptr);
108
+ scs_div(X_scs,X_scs,denom2_scs);
109
+
110
+ scs_get_d(&test,X_scs);
111
+
112
+ /* Polynomial evaluation of atan(X) , X = (x-b(i)) / (1+ x*b(i)) */
113
+ scs_square(X2, X_scs);
114
+ scs_set(res_scs, constant_poly_ptr[0]);
115
+ for(k=1; k < 10; k++) {
116
+ /* we use Horner expression */
117
+ scs_mul(res_scs, res_scs, X2);
118
+ scs_add(res_scs, constant_poly_ptr[k], res_scs);
119
+ }
120
+ scs_mul(poly_scs, res_scs, X_scs);
121
+
122
+ /* reconstruction : */
123
+
124
+ /* 1st we load atan ( b[i] ) in a scs*/
125
+ scs_set_d( atanbhihi , arctan_table[i][ATAN_BHI].d);
126
+ scs_set_d( atanbhilo , arctan_table[i][ATAN_BLO].d);
127
+ scs_set_d( atanblo , atan_blolo[i].d);
128
+ scs_add(atanbhi,atanbhihi,atanbhilo);
129
+ scs_add(atanb,atanbhi,atanblo);
130
+ scs_add(res_scs,atanb, poly_scs);
131
+ return;
132
+ }
133
+
134
+ else
135
+ { /* no reduction needed */
136
+ /* Polynomial evaluation of atan(x) */
137
+ scs_square(X2, x);
138
+ scs_set(res_scs, constant_poly_ptr[0]);
139
+ for(k=1; k < 10; k++) {
140
+ /* we use Horner expression */
141
+ scs_mul(res_scs, res_scs, X2);
142
+ scs_add(res_scs, constant_poly_ptr[k], res_scs);
143
+ }
144
+ scs_mul(res_scs, res_scs, x);
145
+ return;
146
+ }
147
+ }
148
+
149
+
150
+
151
+ static void scs_atanpi(scs_ptr res, scs_ptr x){
152
+ scs_t at;
153
+ scs_atan(at, x);
154
+ scs_mul(res, at, InvPiSCS_ptr);
155
+ }
156
+
157
+
158
+
159
+
160
+ double scs_atan_rn(double x){
161
+ /* This function does NOT compute atan(x) correctly if it isn't
162
+ * called in atan_rn()
163
+ */
164
+ scs_t sc1;
165
+ scs_t res_scs;
166
+ db_number res;
167
+ int sign =1;
168
+
169
+ res.d = x;
170
+
171
+ if (x < 0){
172
+ sign = -1;
173
+ x *= -1;
174
+ }
175
+ scs_set_d(sc1, x);
176
+ scs_atan(res_scs, sc1);
177
+ scs_get_d(&res.d, res_scs);
178
+
179
+ res.d *= sign;
180
+
181
+ return res.d;
182
+ }
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+ double scs_atan_rd(double x){
192
+ scs_t sc1;
193
+ scs_t res_scs;
194
+ db_number res;
195
+ int sign = 1;
196
+
197
+ res.d = x;
198
+
199
+ /* Filter cases */
200
+ if (x < 0){
201
+ sign = -1;
202
+ x *= -1;
203
+ }
204
+ scs_set_d(sc1, x);
205
+ scs_atan(res_scs, sc1);
206
+ if (sign == -1){
207
+ scs_get_d_pinf(&res.d, res_scs);
208
+ res.d *= -1;
209
+ return res.d;
210
+ }
211
+ else{
212
+ scs_get_d_minf(&res.d, res_scs);
213
+ return res.d;
214
+ }
215
+ }
216
+
217
+
218
+
219
+
220
+
221
+ double scs_atan_ru(double x){
222
+ scs_t sc1;
223
+ scs_t res_scs;
224
+ db_number res;
225
+ int sign = 1;
226
+
227
+ res.d = x;
228
+
229
+ /* Filter cases */
230
+ if (x < 0){
231
+ sign = -1;
232
+ x *= -1;
233
+ }
234
+
235
+ scs_set_d(sc1, x);
236
+ scs_atan(res_scs, sc1);
237
+ if (sign == -1){
238
+ scs_get_d_minf(&res.d, res_scs);
239
+ res.d *= -1;
240
+ return res.d;
241
+ }
242
+ else{
243
+ scs_get_d_pinf(&res.d, res_scs);
244
+ return res.d;
245
+ }
246
+ }
247
+
248
+
249
+
250
+
251
+
252
+ /************************************************************/
253
+ /******** AtanPi *******************************************/
254
+
255
+
256
+
257
+
258
+ double scs_atanpi_rn(double x){
259
+ /* This function does NOT compute atanpi(x) correctly if it isn't
260
+ * called in atanpi_rn()
261
+ */
262
+ scs_t sc1;
263
+ scs_t res_scs;
264
+ db_number res;
265
+ int sign =1;
266
+
267
+ res.d = x;
268
+
269
+ if (x < 0){
270
+ sign = -1;
271
+ x *= -1;
272
+ }
273
+ scs_set_d(sc1, x);
274
+ scs_atanpi(res_scs, sc1);
275
+ scs_get_d(&res.d, res_scs);
276
+
277
+ res.d *= sign;
278
+
279
+ return res.d;
280
+ }
281
+
282
+
283
+ double scs_atanpi_rd(double x){
284
+ scs_t sc1;
285
+ scs_t res_scs;
286
+ db_number res;
287
+ int sign = 1;
288
+
289
+ res.d = x;
290
+
291
+ /* Filter cases */
292
+ if (x < 0){
293
+ sign = -1;
294
+ x *= -1;
295
+ }
296
+ scs_set_d(sc1, x);
297
+ scs_atanpi(res_scs, sc1);
298
+ if (sign == -1){
299
+ scs_get_d_pinf(&res.d, res_scs);
300
+ res.d *= -1;
301
+ return res.d;
302
+ }
303
+ else{
304
+ scs_get_d_minf(&res.d, res_scs);
305
+ return res.d;
306
+ }
307
+ }
308
+
309
+ /*************************************************************
310
+ *************************************************************
311
+ * ROUNDED TOWARD +INFINITY
312
+ *************************************************************
313
+ *************************************************************/
314
+
315
+ double scs_atanpi_ru(double x){
316
+ scs_t sc1;
317
+ scs_t res_scs;
318
+ db_number res;
319
+ int sign = 1;
320
+
321
+ res.d = x;
322
+
323
+ /* Filter cases */
324
+ if (x < 0){
325
+ sign = -1;
326
+ x *= -1;
327
+ }
328
+
329
+ scs_set_d(sc1, x);
330
+ scs_atanpi(res_scs, sc1);
331
+ if (sign == -1){
332
+ scs_get_d_minf(&res.d, res_scs);
333
+ res.d *= -1;
334
+ return res.d;
335
+ }
336
+ else{
337
+ scs_get_d_pinf(&res.d, res_scs);
338
+ return res.d;
339
+ }
340
+ }
341
+
@@ -0,0 +1,198 @@
1
+ #include "crlibm.h"
2
+ #include "crlibm_private.h"
3
+ #include "atan_fast.h"
4
+
5
+ /*File generated by maple/atan.mpl */
6
+ static const scs constant_poly [10]=
7
+ /* ~-5.26315789473684210526315789473684210526315789473684e-02 */
8
+ {{{0x035e50d7, 0x250d7943, 0x179435e5, 0x035e50d7,
9
+ 0x250d7943, 0x179435e5, 0x035e50d7, 0x250d7943},
10
+ DB_ONE, -1, -1 }
11
+ ,
12
+ /* ~5.88235294117647058823529411764705882352941176470588e-02 */
13
+ {{0x03c3c3c3, 0x30f0f0f0, 0x3c3c3c3c, 0x0f0f0f0f,
14
+ 0x03c3c3c3, 0x30f0f0f0, 0x3c3c3c3c, 0x0f0f0f0f},
15
+ DB_ONE, -1, 1 }
16
+ ,
17
+ /* ~-6.66666666666666666666666666666666666666666666666667e-02 */
18
+ {{0x04444444, 0x11111111, 0x04444444, 0x11111111,
19
+ 0x04444444, 0x11111111, 0x04444444, 0x11111111},
20
+ DB_ONE, -1, -1 }
21
+ ,
22
+ /* ~7.69230769230769230769230769230769230769230769230769e-02 */
23
+ {{0x04ec4ec4, 0x3b13b13b, 0x04ec4ec4, 0x3b13b13b,
24
+ 0x04ec4ec4, 0x3b13b13b, 0x04ec4ec4, 0x3b13b13b},
25
+ DB_ONE, -1, 1 }
26
+ ,
27
+ /* ~-9.09090909090909090909090909090909090909090909090909e-02 */
28
+ {{0x05d1745d, 0x05d1745d, 0x05d1745d, 0x05d1745d,
29
+ 0x05d1745d, 0x05d1745d, 0x05d1745d, 0x05d1745d},
30
+ DB_ONE, -1, -1 }
31
+ ,
32
+ /* ~1.11111111111111111111111111111111111111111111111111e-01 */
33
+ {{0x071c71c7, 0x071c71c7, 0x071c71c7, 0x071c71c7,
34
+ 0x071c71c7, 0x071c71c7, 0x071c71c7, 0x071c71c7},
35
+ DB_ONE, -1, 1 }
36
+ ,
37
+ /* ~-1.42857142857142857142857142857142857142857142857143e-01 */
38
+ {{0x09249249, 0x09249249, 0x09249249, 0x09249249,
39
+ 0x09249249, 0x09249249, 0x09249249, 0x09249249},
40
+ DB_ONE, -1, -1 }
41
+ ,
42
+ /* ~2.00000000000000000000000000000000000000000000000000e-01 */
43
+ {{0x0ccccccc, 0x33333333, 0x0ccccccc, 0x33333333,
44
+ 0x0ccccccc, 0x33333333, 0x0ccccccc, 0x33333333},
45
+ DB_ONE, -1, 1 }
46
+ ,
47
+ /* ~-3.33333333333333333333333333333333333333333333333333e-01 */
48
+ {{0x15555555, 0x15555555, 0x15555555, 0x15555555,
49
+ 0x15555555, 0x15555555, 0x15555555, 0x15555555},
50
+ DB_ONE, -1, -1 }
51
+ ,
52
+ /* ~1.00000000000000000000000000000000000000000000000000e+00 */
53
+ {{0x00000001, 0x00000000, 0x00000000, 0x00000000,
54
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000},
55
+ DB_ONE, 0, 1 }
56
+ };
57
+ #define constant_poly_ptr (scs_ptr)&constant_poly
58
+ static const scs InvPiSCS=
59
+ {{0x145f306d, 0x327220a9, 0x13f84eaf, 0x28fa9a6e,
60
+ 0x381b6c52, 0x2cc9e21c, 0x2083fca2, 0x31d5ef5d},
61
+ DB_ONE, -1, 1 }
62
+ ;
63
+ #define InvPiSCS_ptr (scs_ptr)(& InvPiSCS)
64
+
65
+ #ifdef WORDS_BIGENDIAN
66
+
67
+ static const db_number atan_blolo[62] = {
68
+ /* 0 */ {{0xB8D1C5F3,0xA947CCE9}} /* -5.3484426395e-35 */,
69
+ /* 1 */ {{0xB8B05943,0x3C749846}} /* -1.2299381479e-35 */,
70
+ /* 2 */ {{0x38FC2F2A,0x267751FB}} /* +3.3925541143e-34 */,
71
+ /* 3 */ {{0x38D44E61,0xDDA4249D}} /* +6.1106690132e-35 */,
72
+ /* 4 */ {{0xB906FBFA,0xA5B245C8}} /* -5.5332673453e-34 */,
73
+ /* 5 */ {{0xB8DE1E98,0x67CABE65}} /* -9.0637612563e-35 */,
74
+ /* 6 */ {{0x38BD7B8F,0x45D13048}} /* +2.2180284354e-35 */,
75
+ /* 7 */ {{0xB9049436,0x23AD369B}} /* -4.9542022687e-34 */,
76
+ /* 8 */ {{0xB8F98586,0xF6BB1DB7}} /* -3.0720497269e-34 */,
77
+ /* 9 */ {{0xB89BC985,0xCB4D6219}} /* -5.2261910438e-36 */,
78
+ /* 10 */ {{0xB8C4002C,0x9C3884F4}} /* -3.0093679582e-35 */,
79
+ /* 11 */ {{0x3910CBC4,0x893058D9}} /* +8.0869642604e-34 */,
80
+ /* 12 */ {{0xB8F5408B,0xFF010BB5}} /* -2.5581328396e-34 */,
81
+ /* 13 */ {{0xB908570F,0xB5813578}} /* -5.8596619457e-34 */,
82
+ /* 14 */ {{0x39155B89,0x7E967248}} /* +1.0283294335e-33 */,
83
+ /* 15 */ {{0xB8CD159A,0x2031F115}} /* -4.3761315763e-35 */,
84
+ /* 16 */ {{0xB8E8D9C6,0x0FC3C81C}} /* -1.4956458040e-34 */,
85
+ /* 17 */ {{0x38C0AC30,0x8219F20D}} /* +2.5086163140e-35 */,
86
+ /* 18 */ {{0x38B36506,0x32EDCB95}} /* +1.4590894790e-35 */,
87
+ /* 19 */ {{0xB8FD57B0,0x5932E7C2}} /* -3.5319791285e-34 */,
88
+ /* 20 */ {{0x38C73827,0x91A2D916}} /* +3.4936600564e-35 */,
89
+ /* 21 */ {{0xB92FE60D,0x9EC5116C}} /* -3.0717278111e-33 */,
90
+ /* 22 */ {{0x3903AADF,0x6A3B8AE2}} /* +4.7347715466e-34 */,
91
+ /* 23 */ {{0xB88D6A01,0x71B87C3C}} /* -2.7660872166e-36 */,
92
+ /* 24 */ {{0xB8E17427,0xEA5AC8E8}} /* -1.0504584084e-34 */,
93
+ /* 25 */ {{0x38F4ED52,0xF776B005}} /* +2.5190016806e-34 */,
94
+ /* 26 */ {{0xB9265B23,0x75D2B05C}} /* -2.1528054385e-33 */,
95
+ /* 27 */ {{0xB8DA45DA,0xAFEAB282}} /* -7.9062036715e-35 */,
96
+ /* 28 */ {{0x3912EF75,0xBD16D3D4}} /* +9.1170587963e-34 */,
97
+ /* 29 */ {{0x390AB3D7,0xE904B022}} /* +6.4283962392e-34 */,
98
+ /* 30 */ {{0xB8EE688B,0x3F9F468B}} /* -1.8301374849e-34 */,
99
+ /* 31 */ {{0xB9225DF6,0x71A98823}} /* -1.7686817787e-33 */,
100
+ /* 32 */ {{0xB8CC82B0,0x522BE0F8}} /* -4.2897836993e-35 */,
101
+ /* 33 */ {{0xB912AFE0,0x88BB6A0B}} /* -8.9974727841e-34 */,
102
+ /* 34 */ {{0x38D4DC99,0x8640FAE5}} /* +6.2778447830e-35 */,
103
+ /* 35 */ {{0xB9016FC6,0x406A343B}} /* -4.1977132916e-34 */,
104
+ /* 36 */ {{0x3909804C,0x126FC74C}} /* +6.1391811422e-34 */,
105
+ /* 37 */ {{0x39051033,0xE5B0956F}} /* +5.0708030720e-34 */,
106
+ /* 38 */ {{0xB910CADC,0x203B114C}} /* -8.0852567814e-34 */,
107
+ /* 39 */ {{0x38EFCAC7,0xF97ED36B}} /* +1.9134182531e-34 */,
108
+ /* 40 */ {{0xB92464C0,0xB51D77B4}} /* -1.9638289218e-33 */,
109
+ /* 41 */ {{0x391157F3,0x2D4A03DE}} /* +8.3506176591e-34 */,
110
+ /* 42 */ {{0xB92BD929,0x136A8DDE}} /* -2.6816921082e-33 */,
111
+ /* 43 */ {{0x390F1514,0x035DF6B3}} /* +7.4828003563e-34 */,
112
+ /* 44 */ {{0xB92606EC,0x19DB7E3B}} /* -2.1211268072e-33 */,
113
+ /* 45 */ {{0x393B104B,0xCDA1B51D}} /* +5.2122706777e-33 */,
114
+ /* 46 */ {{0x3935FB01,0xF88A520C}} /* +4.2332900876e-33 */,
115
+ /* 47 */ {{0xB9189ED1,0x1940944D}} /* -1.1854280852e-33 */,
116
+ /* 48 */ {{0xB914E8F2,0x38D4794B}} /* -1.0067772791e-33 */,
117
+ /* 49 */ {{0xB93DF07A,0x73581CF5}} /* -5.7661126209e-33 */,
118
+ /* 50 */ {{0xB939C22F,0x727CE10C}} /* -4.9609136744e-33 */,
119
+ /* 51 */ {{0xB8EF37D2,0x26E1A810}} /* -1.8788680655e-34 */,
120
+ /* 52 */ {{0x391A4251,0x45155DAA}} /* +1.2643273919e-33 */,
121
+ /* 53 */ {{0xB9126D2F,0xA42D0A9A}} /* -8.8720409776e-34 */,
122
+ /* 54 */ {{0xB93CAF8B,0x3DFAFFA5}} /* -5.5246684074e-33 */,
123
+ /* 55 */ {{0x3919C170,0xA9A35831}} /* +1.2400882522e-33 */,
124
+ /* 56 */ {{0xB924C2B3,0xAE51E4B3}} /* -1.9991686511e-33 */,
125
+ /* 57 */ {{0xB8DEFB7D,0x0DE98917}} /* -9.3234199178e-35 */,
126
+ /* 58 */ {{0xB916EC39,0x1ABE373B}} /* -1.1036900898e-33 */,
127
+ /* 59 */ {{0x391C5BA4,0x4135ADBE}} /* +1.3653868341e-33 */,
128
+ /* 60 */ {{0xB9112692,0xD7179E60}} /* -8.2577511316e-34 */,
129
+ /* 61 */ {{0x392F96B5,0xBCC93753}} /* +3.0418821818e-33 */,
130
+ };
131
+
132
+ #else
133
+ static const db_number atan_blolo[62] = {
134
+ /* 0 */ {{0xA947CCE9,0xB8D1C5F3}} /* -5.3484426395e-35 */,
135
+ /* 1 */ {{0x3C749846,0xB8B05943}} /* -1.2299381479e-35 */,
136
+ /* 2 */ {{0x267751FB,0x38FC2F2A}} /* +3.3925541143e-34 */,
137
+ /* 3 */ {{0xDDA4249D,0x38D44E61}} /* +6.1106690132e-35 */,
138
+ /* 4 */ {{0xA5B245C8,0xB906FBFA}} /* -5.5332673453e-34 */,
139
+ /* 5 */ {{0x67CABE65,0xB8DE1E98}} /* -9.0637612563e-35 */,
140
+ /* 6 */ {{0x45D13048,0x38BD7B8F}} /* +2.2180284354e-35 */,
141
+ /* 7 */ {{0x23AD369B,0xB9049436}} /* -4.9542022687e-34 */,
142
+ /* 8 */ {{0xF6BB1DB7,0xB8F98586}} /* -3.0720497269e-34 */,
143
+ /* 9 */ {{0xCB4D6219,0xB89BC985}} /* -5.2261910438e-36 */,
144
+ /* 10 */ {{0x9C3884F4,0xB8C4002C}} /* -3.0093679582e-35 */,
145
+ /* 11 */ {{0x893058D9,0x3910CBC4}} /* +8.0869642604e-34 */,
146
+ /* 12 */ {{0xFF010BB5,0xB8F5408B}} /* -2.5581328396e-34 */,
147
+ /* 13 */ {{0xB5813578,0xB908570F}} /* -5.8596619457e-34 */,
148
+ /* 14 */ {{0x7E967248,0x39155B89}} /* +1.0283294335e-33 */,
149
+ /* 15 */ {{0x2031F115,0xB8CD159A}} /* -4.3761315763e-35 */,
150
+ /* 16 */ {{0x0FC3C81C,0xB8E8D9C6}} /* -1.4956458040e-34 */,
151
+ /* 17 */ {{0x8219F20D,0x38C0AC30}} /* +2.5086163140e-35 */,
152
+ /* 18 */ {{0x32EDCB95,0x38B36506}} /* +1.4590894790e-35 */,
153
+ /* 19 */ {{0x5932E7C2,0xB8FD57B0}} /* -3.5319791285e-34 */,
154
+ /* 20 */ {{0x91A2D916,0x38C73827}} /* +3.4936600564e-35 */,
155
+ /* 21 */ {{0x9EC5116C,0xB92FE60D}} /* -3.0717278111e-33 */,
156
+ /* 22 */ {{0x6A3B8AE2,0x3903AADF}} /* +4.7347715466e-34 */,
157
+ /* 23 */ {{0x71B87C3C,0xB88D6A01}} /* -2.7660872166e-36 */,
158
+ /* 24 */ {{0xEA5AC8E8,0xB8E17427}} /* -1.0504584084e-34 */,
159
+ /* 25 */ {{0xF776B005,0x38F4ED52}} /* +2.5190016806e-34 */,
160
+ /* 26 */ {{0x75D2B05C,0xB9265B23}} /* -2.1528054385e-33 */,
161
+ /* 27 */ {{0xAFEAB282,0xB8DA45DA}} /* -7.9062036715e-35 */,
162
+ /* 28 */ {{0xBD16D3D4,0x3912EF75}} /* +9.1170587963e-34 */,
163
+ /* 29 */ {{0xE904B022,0x390AB3D7}} /* +6.4283962392e-34 */,
164
+ /* 30 */ {{0x3F9F468B,0xB8EE688B}} /* -1.8301374849e-34 */,
165
+ /* 31 */ {{0x71A98823,0xB9225DF6}} /* -1.7686817787e-33 */,
166
+ /* 32 */ {{0x522BE0F8,0xB8CC82B0}} /* -4.2897836993e-35 */,
167
+ /* 33 */ {{0x88BB6A0B,0xB912AFE0}} /* -8.9974727841e-34 */,
168
+ /* 34 */ {{0x8640FAE5,0x38D4DC99}} /* +6.2778447830e-35 */,
169
+ /* 35 */ {{0x406A343B,0xB9016FC6}} /* -4.1977132916e-34 */,
170
+ /* 36 */ {{0x126FC74C,0x3909804C}} /* +6.1391811422e-34 */,
171
+ /* 37 */ {{0xE5B0956F,0x39051033}} /* +5.0708030720e-34 */,
172
+ /* 38 */ {{0x203B114C,0xB910CADC}} /* -8.0852567814e-34 */,
173
+ /* 39 */ {{0xF97ED36B,0x38EFCAC7}} /* +1.9134182531e-34 */,
174
+ /* 40 */ {{0xB51D77B4,0xB92464C0}} /* -1.9638289218e-33 */,
175
+ /* 41 */ {{0x2D4A03DE,0x391157F3}} /* +8.3506176591e-34 */,
176
+ /* 42 */ {{0x136A8DDE,0xB92BD929}} /* -2.6816921082e-33 */,
177
+ /* 43 */ {{0x035DF6B3,0x390F1514}} /* +7.4828003563e-34 */,
178
+ /* 44 */ {{0x19DB7E3B,0xB92606EC}} /* -2.1211268072e-33 */,
179
+ /* 45 */ {{0xCDA1B51D,0x393B104B}} /* +5.2122706777e-33 */,
180
+ /* 46 */ {{0xF88A520C,0x3935FB01}} /* +4.2332900876e-33 */,
181
+ /* 47 */ {{0x1940944D,0xB9189ED1}} /* -1.1854280852e-33 */,
182
+ /* 48 */ {{0x38D4794B,0xB914E8F2}} /* -1.0067772791e-33 */,
183
+ /* 49 */ {{0x73581CF5,0xB93DF07A}} /* -5.7661126209e-33 */,
184
+ /* 50 */ {{0x727CE10C,0xB939C22F}} /* -4.9609136744e-33 */,
185
+ /* 51 */ {{0x26E1A810,0xB8EF37D2}} /* -1.8788680655e-34 */,
186
+ /* 52 */ {{0x45155DAA,0x391A4251}} /* +1.2643273919e-33 */,
187
+ /* 53 */ {{0xA42D0A9A,0xB9126D2F}} /* -8.8720409776e-34 */,
188
+ /* 54 */ {{0x3DFAFFA5,0xB93CAF8B}} /* -5.5246684074e-33 */,
189
+ /* 55 */ {{0xA9A35831,0x3919C170}} /* +1.2400882522e-33 */,
190
+ /* 56 */ {{0xAE51E4B3,0xB924C2B3}} /* -1.9991686511e-33 */,
191
+ /* 57 */ {{0x0DE98917,0xB8DEFB7D}} /* -9.3234199178e-35 */,
192
+ /* 58 */ {{0x1ABE373B,0xB916EC39}} /* -1.1036900898e-33 */,
193
+ /* 59 */ {{0x4135ADBE,0x391C5BA4}} /* +1.3653868341e-33 */,
194
+ /* 60 */ {{0xD7179E60,0xB9112692}} /* -8.2577511316e-34 */,
195
+ /* 61 */ {{0xBCC93753,0x392F96B5}} /* +3.0418821818e-33 */,
196
+ };
197
+
198
+ #endif /* WORDS_BIGENDIAN */