intervals 0.3.56

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 (131) hide show
  1. data/VERSION.txt +1 -0
  2. data/ext/crlibm/AUTHORS +2 -0
  3. data/ext/crlibm/COPYING +504 -0
  4. data/ext/crlibm/ChangeLog +80 -0
  5. data/ext/crlibm/INSTALL +182 -0
  6. data/ext/crlibm/Makefile.am +84 -0
  7. data/ext/crlibm/Makefile.in +530 -0
  8. data/ext/crlibm/NEWS +0 -0
  9. data/ext/crlibm/README +31 -0
  10. data/ext/crlibm/TODO +47 -0
  11. data/ext/crlibm/VERSION +1 -0
  12. data/ext/crlibm/aclocal.m4 +989 -0
  13. data/ext/crlibm/atan-itanium.c +846 -0
  14. data/ext/crlibm/atan-pentium.c +261 -0
  15. data/ext/crlibm/atan_accurate.c +244 -0
  16. data/ext/crlibm/atan_accurate.h +191 -0
  17. data/ext/crlibm/atan_fast.c +324 -0
  18. data/ext/crlibm/atan_fast.h +678 -0
  19. data/ext/crlibm/config.guess +1461 -0
  20. data/ext/crlibm/config.sub +1566 -0
  21. data/ext/crlibm/configure +7517 -0
  22. data/ext/crlibm/configure.ac +364 -0
  23. data/ext/crlibm/crlibm.h +125 -0
  24. data/ext/crlibm/crlibm_config.h +149 -0
  25. data/ext/crlibm/crlibm_config.h.in +148 -0
  26. data/ext/crlibm/crlibm_private.c +293 -0
  27. data/ext/crlibm/crlibm_private.h +658 -0
  28. data/ext/crlibm/csh_fast.c +631 -0
  29. data/ext/crlibm/csh_fast.h +771 -0
  30. data/ext/crlibm/double-extended.h +496 -0
  31. data/ext/crlibm/exp-td.c +962 -0
  32. data/ext/crlibm/exp-td.h +685 -0
  33. data/ext/crlibm/exp_accurate.c +197 -0
  34. data/ext/crlibm/exp_accurate.h +85 -0
  35. data/ext/crlibm/gappa/log-de-E0-logir0.gappa +106 -0
  36. data/ext/crlibm/gappa/log-de-E0.gappa +79 -0
  37. data/ext/crlibm/gappa/log-de.gappa +81 -0
  38. data/ext/crlibm/gappa/log-td-E0-logir0.gappa +126 -0
  39. data/ext/crlibm/gappa/log-td-E0.gappa +143 -0
  40. data/ext/crlibm/gappa/log-td-accurate-E0-logir0.gappa +230 -0
  41. data/ext/crlibm/gappa/log-td-accurate-E0.gappa +213 -0
  42. data/ext/crlibm/gappa/log-td-accurate.gappa +217 -0
  43. data/ext/crlibm/gappa/log-td.gappa +156 -0
  44. data/ext/crlibm/gappa/trigoSinCosCase3.gappa +204 -0
  45. data/ext/crlibm/gappa/trigoTanCase2.gappa +73 -0
  46. data/ext/crlibm/install-sh +269 -0
  47. data/ext/crlibm/log-de.c +431 -0
  48. data/ext/crlibm/log-de.h +732 -0
  49. data/ext/crlibm/log-td.c +852 -0
  50. data/ext/crlibm/log-td.h +819 -0
  51. data/ext/crlibm/log10-td.c +906 -0
  52. data/ext/crlibm/log10-td.h +823 -0
  53. data/ext/crlibm/log2-td.c +935 -0
  54. data/ext/crlibm/log2-td.h +821 -0
  55. data/ext/crlibm/maple/atan.mpl +359 -0
  56. data/ext/crlibm/maple/common-procedures.mpl +997 -0
  57. data/ext/crlibm/maple/csh.mpl +446 -0
  58. data/ext/crlibm/maple/double-extended.mpl +151 -0
  59. data/ext/crlibm/maple/exp-td.mpl +195 -0
  60. data/ext/crlibm/maple/log-de.mpl +243 -0
  61. data/ext/crlibm/maple/log-td.mpl +316 -0
  62. data/ext/crlibm/maple/log10-td.mpl +345 -0
  63. data/ext/crlibm/maple/log2-td.mpl +334 -0
  64. data/ext/crlibm/maple/trigo.mpl +728 -0
  65. data/ext/crlibm/maple/triple-double.mpl +58 -0
  66. data/ext/crlibm/missing +198 -0
  67. data/ext/crlibm/mkinstalldirs +40 -0
  68. data/ext/crlibm/rem_pio2_accurate.c +219 -0
  69. data/ext/crlibm/rem_pio2_accurate.h +53 -0
  70. data/ext/crlibm/scs_lib/AUTHORS +3 -0
  71. data/ext/crlibm/scs_lib/COPYING +504 -0
  72. data/ext/crlibm/scs_lib/ChangeLog +16 -0
  73. data/ext/crlibm/scs_lib/INSTALL +215 -0
  74. data/ext/crlibm/scs_lib/Makefile.am +18 -0
  75. data/ext/crlibm/scs_lib/Makefile.in +328 -0
  76. data/ext/crlibm/scs_lib/NEWS +0 -0
  77. data/ext/crlibm/scs_lib/README +9 -0
  78. data/ext/crlibm/scs_lib/TODO +4 -0
  79. data/ext/crlibm/scs_lib/addition_scs.c +623 -0
  80. data/ext/crlibm/scs_lib/config.guess +1461 -0
  81. data/ext/crlibm/scs_lib/config.sub +1566 -0
  82. data/ext/crlibm/scs_lib/configure +6226 -0
  83. data/ext/crlibm/scs_lib/division_scs.c +110 -0
  84. data/ext/crlibm/scs_lib/double2scs.c +174 -0
  85. data/ext/crlibm/scs_lib/install-sh +269 -0
  86. data/ext/crlibm/scs_lib/missing +198 -0
  87. data/ext/crlibm/scs_lib/mkinstalldirs +40 -0
  88. data/ext/crlibm/scs_lib/multiplication_scs.c +456 -0
  89. data/ext/crlibm/scs_lib/poly_fct.c +112 -0
  90. data/ext/crlibm/scs_lib/print_scs.c +73 -0
  91. data/ext/crlibm/scs_lib/rand_scs.c +63 -0
  92. data/ext/crlibm/scs_lib/scs.h +353 -0
  93. data/ext/crlibm/scs_lib/scs2double.c +391 -0
  94. data/ext/crlibm/scs_lib/scs2mpf.c +58 -0
  95. data/ext/crlibm/scs_lib/scs2mpfr.c +61 -0
  96. data/ext/crlibm/scs_lib/scs_private.c +23 -0
  97. data/ext/crlibm/scs_lib/scs_private.h +133 -0
  98. data/ext/crlibm/scs_lib/tests/tbx_timing.h +102 -0
  99. data/ext/crlibm/scs_lib/wrapper_scs.h +486 -0
  100. data/ext/crlibm/scs_lib/zero_scs.c +52 -0
  101. data/ext/crlibm/stamp-h.in +1 -0
  102. data/ext/crlibm/tests/Makefile.am +43 -0
  103. data/ext/crlibm/tests/Makefile.in +396 -0
  104. data/ext/crlibm/tests/blind_test.c +148 -0
  105. data/ext/crlibm/tests/generate_test_vectors.c +258 -0
  106. data/ext/crlibm/tests/soak_test.c +334 -0
  107. data/ext/crlibm/tests/test_common.c +627 -0
  108. data/ext/crlibm/tests/test_common.h +28 -0
  109. data/ext/crlibm/tests/test_perf.c +570 -0
  110. data/ext/crlibm/tests/test_val.c +249 -0
  111. data/ext/crlibm/trigo_accurate.c +500 -0
  112. data/ext/crlibm/trigo_accurate.h +331 -0
  113. data/ext/crlibm/trigo_fast.c +1219 -0
  114. data/ext/crlibm/trigo_fast.h +639 -0
  115. data/ext/crlibm/triple-double.h +878 -0
  116. data/ext/extconf.rb +31 -0
  117. data/ext/fpu.c +107 -0
  118. data/ext/jamis-mod.rb +591 -0
  119. data/lib/fpu.rb +287 -0
  120. data/lib/interval.rb +1170 -0
  121. data/lib/intervals.rb +212 -0
  122. data/lib/struct_float.rb +133 -0
  123. data/test/data_atan.txt +360 -0
  124. data/test/data_cos.txt +346 -0
  125. data/test/data_cosh.txt +3322 -0
  126. data/test/data_exp.txt +3322 -0
  127. data/test/data_log.txt +141 -0
  128. data/test/data_sin.txt +140 -0
  129. data/test/data_sinh.txt +3322 -0
  130. data/test/data_tan.txt +342 -0
  131. metadata +186 -0
@@ -0,0 +1,359 @@
1
+ restart:
2
+ Digits := 100:
3
+ with (numapprox):with(orthopoly):
4
+ read "common-procedures.mpl";
5
+ mkdir("TEMPATAN");
6
+
7
+ #First, quick phase
8
+ #Approach for the first function:
9
+ #atan(x) = atan(b(i)) + atan ( (x-bi) / (1+x*b(i) ) )
10
+ #We try to have 64 correct bits
11
+
12
+
13
+
14
+ #Constants
15
+
16
+
17
+ #if (x >= xmax) : return arctan(x)/2)=neareast(Pi/2)
18
+
19
+ log[2](evalf(min(solve(arctan(x)=nearest(Pi/2),x)))):
20
+ xmax:=2^54:
21
+
22
+
23
+ #halfPi=Pi/2 (remark that maxvalue < Pi/2 so that atan(x) < Pi/2
24
+
25
+ halfPi:=nearest(Pi/2):
26
+ halfPi_to_plus_infinity:=nearest(nearest(Pi/2)*(1+2^(-53))):
27
+
28
+
29
+ # if (xmin<xmin) : return arctan(x)=x
30
+
31
+ xmin=2^(-27);
32
+
33
+ ieeehexa(halfPi); ieeehexa( halfPi_to_plus_infinity ); ieeehexa(2^(-27));ieeehexa(2^(54));ieeehexa(2^(-10));
34
+
35
+
36
+ #Interval parameters
37
+ #Some constants :
38
+ e:=2^(-6.3):
39
+ marge := 2^(-30):
40
+
41
+ #The intervals are (a[i],a[i+1]). the "middle" is b(i) :
42
+ maxx := bi -> simplify( solve( (x-bi) / (1+x*bi) = e ,x) ):
43
+ minx := bi -> simplify(solve( (x-bi) /(1+x*bi)=-e ,x)):
44
+
45
+ nextbi := proc (x) evalf( max(solve( minx(bi) = x ,bi) )*(1-marge)); end:
46
+
47
+ allbi := proc (n)
48
+ local xi,nbi,x,i,j;
49
+ global b,a, nb_of_ai, nb_of_bi, value_for_dicho;
50
+ x := e;
51
+ nbi := 0;
52
+ i := 0;
53
+ while(i<n and nbi < 1/e and nbi >= 0) do
54
+ nbi := nearest ( nextbi(x) );
55
+ b[i] := evalf( nbi );
56
+ a[i] := x;
57
+ x := evalf(maxx(nbi));
58
+ i:=i+1;
59
+ od;
60
+ j:=0;
61
+ while ( 2^j < i ) do j:=j+1 od:
62
+ nb_of_ai := i;
63
+ nb_of_bi := i;
64
+ b[i-1] := nearest(1/e+4):
65
+ value_for_dicho := 2^j;
66
+ return i,b[0],b[i-1];
67
+ end:
68
+
69
+ allbi(100);
70
+
71
+
72
+
73
+
74
+ #The polynome and its size ( 4 because 4 terms : x^2/3, ...)
75
+
76
+ Q9:= poly_exact(x-1/3*x^3+1/5*x^5 -1/7*x^7+1/9*x^9):
77
+ deg_poly := 4:
78
+ coef_poly[0]:=nearest (-1/3):
79
+ coef_poly[1]:=nearest (1/5):
80
+ coef_poly[2]:=nearest (-1/7):
81
+ coef_poly[3]:=nearest (1/9):
82
+
83
+ Q := x^2 * coef_poly[0] + x^4*coef_poly[1] + x^6*coef_poly[2] + x^8 * coef_poly[3]:
84
+
85
+ Qprime := poly_exact( x * coef_poly[0] + x^2*coef_poly[1] + x^3*coef_poly[2] + x^4 * coef_poly[3]):
86
+
87
+ log[2] (infnorm( (arctan(x)-x*(1+Q) )/x,x=2^(-53)..e));
88
+ # we can note that arctan(x) = sum((-1)^i*x^(2*i+1)/(2*i+1), i = (0 .. infinity))
89
+ # so ( arctan(x) - Q9(x) ) / x = sum((-1)^i*x^(2*i)/(2*i+1), i = (5 .. infinity))
90
+ # so abs ( (arctan(x) -Q9(x) )/x ) <= x^10 * sum((-1)^(i+1)*x^(2*i)/(2*i+1+10), i = (0 .. infinity))
91
+ # <= x^10 * 1/11
92
+ # <= 2^(-66) if x<2^(-6.3)
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ #Conputation of the RN constant
103
+
104
+
105
+ #Epsilon = relative error
106
+ #Delta = absolute error
107
+ #1st : Error about reduction:
108
+
109
+ EpsilonXminusBi := 2^(-105):
110
+
111
+ # 1 + x*b[i] :
112
+ Epsilon1A22xbi := 2^(-104):
113
+
114
+
115
+ # Xred = (x-b[i]) / ( 1 + x*b[i] )
116
+
117
+ EpsilonXred := EpsilonXminusBi+Epsilon1A22xbi + 2^(-105):
118
+
119
+ DeltaXred := EpsilonXred * e:
120
+
121
+ log2(EpsilonXred);
122
+
123
+ #Polynomial evaluation :
124
+ #atan ~= x - x^3/3 + x^5/5 - x^7/7 + x^9/9
125
+ # ~= x * ( 1 + Q(x^2) )
126
+ # = (xhi+xlo) * ( 1 + Q)
127
+ # ~= xhi + (xhi*Q + xlo)
128
+
129
+ # Warning : the approx about x !!
130
+
131
+ #calc of Q:
132
+
133
+ EpsilonXred2 := (1+2^(-53) + 2^(-105) )^2 * (1+2^(-53)) -1 :
134
+
135
+ log2(EpsilonXred2);
136
+
137
+ errlist:=errlist_quickphase_horner( degree( x^4 ),0,0,EpsilonXred2, 2**(-53)):
138
+
139
+ rounding_error1:= compute_horner_rounding_error(Qprime,x,e,errlist,true):
140
+
141
+ EpsilonQ := rounding_error1[1]:
142
+ log2(EpsilonQ);
143
+
144
+ # Since q will be multiplied in x(1+q), its absolute error term is :
145
+
146
+ Qmax:=infnorm(Qprime,x=-e^2..e^2):
147
+
148
+ DeltaQ := e*Qmax*EpsilonQ;
149
+ log2(DeltaQ);
150
+
151
+ # calc of xi*Q + xlo + atan(b[i])lo
152
+
153
+ #First the truncation of xredlo*q : at most half an ulp of xredhi*q
154
+ DeltaTruncXredloQ := 2^(-53) * e * Qmax:
155
+ log2(DeltaTruncXredloQ);
156
+ #then the sum of atanbilo and xredlo : the largest term is atanbilo
157
+ DeltaAdd1 := 0.5*ulp(2^(-53)*(Pi/2 + e)):
158
+ log2(DeltaAdd1);
159
+
160
+ #then compute xredhi*q
161
+ DeltaXredhiQ := 0.5*ulp(e*Qmax):
162
+ log2(DeltaXredhiQ);
163
+
164
+ # and the second addition
165
+ DeltaAdd2 := 0.5*ulp(e*Qmax + 2^(-53)*(Pi/2 + e) ):
166
+ log2(DeltaAdd2);
167
+
168
+ DeltaAtanlolo := DeltaTruncXredloQ + DeltaAdd1 + DeltaXredhiQ + DeltaAdd2:
169
+ log2(DeltaAtanlolo);
170
+
171
+ # In the second reconstruction there is one more FP add which is
172
+ # aligned to the previous:
173
+ DeltaReconst := DeltaAtanlolo + DeltaAdd2 :
174
+ log2(DeltaReconst);
175
+
176
+
177
+
178
+ # error due to the approx of atan by P : < e^11/11
179
+ Deltaapprox := infnorm( (arctan(x)-x*(1+Q)), x=0..e):
180
+
181
+ log[2](Deltaapprox);
182
+
183
+
184
+
185
+
186
+
187
+ DeltaTotal := Deltaapprox + DeltaQ + DeltaReconst :
188
+ log2(DeltaTotal);
189
+ EpsilonTotal := evalf( DeltaTotal / arctan(xx) ):
190
+
191
+ EpsilonFinal := infnorm( EpsilonTotal,xx=2^(-6.3)..1,'xmaxmax'):
192
+ EpsilonFinal_i_10 := infnorm( EpsilonTotal,xx=a[10]..2^60,'xmaxmax'):
193
+ log2( EpsilonFinal );
194
+ log2( EpsilonFinal_i_10 );
195
+
196
+
197
+ # Computation of e and e_i_30 (which is e when i>30 (ie x>1)
198
+ E := evalf(compute_rn_constant(EpsilonFinal));
199
+ E_i_10 := evalf(compute_rn_constant(EpsilonFinal_i_10));
200
+
201
+
202
+ #An other Constant : when there is no reduction.
203
+ #We compute the polynom and then atan(x) = x + x.Q
204
+
205
+ Epsilonx2 := 2^(-53):
206
+ errlist:=errlist_quickphase_horner( degree( Qprime ),0,0,Epsilonx2, 2**(-53)):
207
+ rounding_error:= compute_horner_rounding_error(Qprime,x,e,errlist,true):
208
+
209
+ epsilon_Q := rounding_error[1]:
210
+ log[2](epsilon_Q);
211
+
212
+ epsilon_x_Q := 2^(-52):
213
+
214
+ delta_final := 2^(-105)*x + epsilon_Q*x^3 + epsilon_x_Q*x^3 - arctan(x) + x*(1+Q):
215
+ epsilon_final := infnorm(delta_final/x,x=2^(-10)..e):
216
+ epsilon_final_m10 := infnorm(delta_final/x,x=2^(-24)..2^(-10)):
217
+
218
+ log[2](epsilon_final);
219
+ E_no_reduction := evalf(compute_rn_constant(epsilon_final));
220
+ E_no_reduction_m10 := evalf(compute_rn_constant(epsilon_final_m10));
221
+
222
+
223
+
224
+ # Output
225
+
226
+
227
+ #test
228
+ filename:="TEMPATAN/atan_fast.h":
229
+
230
+ fd:=fopen(filename, WRITE, TEXT):
231
+ fprintf(fd, "\n/*File generated by maple/atan.mpl */\n"):
232
+
233
+ fprintf(fd, "#ifndef _ATAN_FAST_H\n#define _ATAN_FAST_H\n\n");
234
+
235
+ fprintf(fd, "#include \"crlibm.h\"\n#include \"crlibm_private.h\"\n"):
236
+
237
+ fprintf(fd,"#ifdef WORDS_BIGENDIAN\n"):
238
+ fprintf(fd, "static const db_number HALFPI = {{0x3FF921FB,0x54442D18}};"):
239
+ fprintf(fd, "static const db_number HALFPI_TO_PLUS_INFINITY = {{0x3FF921FB,0x54442D19}};"):
240
+ fprintf(fd,"\n#else\n"):
241
+ fprintf(fd, "static const db_number HALFPI = {{0x54442D18,0x3FF921FB}};"):
242
+ fprintf(fd, "static const db_number HALFPI_TO_PLUS_INFINITY = {{0x54442D19,0x3FF921FB}};"):
243
+ fprintf(fd,"\n"):
244
+ fprintf(fd,"#endif\n"):
245
+
246
+ fprintf(fd, "#define MIN_REDUCTION_NEEDED %1.50f\n",e):
247
+
248
+ fprintf(fd,"#define nb_of_ai %d\n",nb_of_ai):
249
+ fprintf(fd,"#define nb_of_bi %d\n",nb_of_bi):
250
+
251
+ # we multiply by 2^(-20) in order to prevent from rounding
252
+ fprintf(fd, "static const double rncst[4] ={\n"):
253
+ fprintf(fd, "%1.50f , /* i<10 */ \n",E*(1+2^(-20))) :
254
+ fprintf(fd, "%1.50f , /* i>10 */ \n",E_i_10*(1+2^(-20))) :
255
+ fprintf(fd, "%1.50f , /* e > 2^-10 */ \n",E_no_reduction*(1+2^(-20))) :
256
+ fprintf(fd, "%1.50f , /* e < 2^-10 */ \n };\n",E_no_reduction_m10*(1+2^(-20))) :
257
+
258
+ fprintf(fd, "static const double epsilon[4] ={\n"):
259
+ fprintf(fd, "%1.50e ,\n",EpsilonFinal *(1+2^(-20))) :
260
+ fprintf(fd, "%1.50e ,\n",EpsilonFinal_i_10*(1+2^(-20))) :
261
+ fprintf(fd, "%1.50e ,\n",epsilon_final*(1+2^(-20))) :
262
+ fprintf(fd, "%1.50e ,\n };\n",epsilon_final_m10*(1+2^(-20))) :
263
+
264
+ fprintf(fd, "#define DEGREE %d\n", deg_poly):
265
+ fprintf(fd, "static double const coef_poly[%d] = \n{\n",deg_poly):
266
+
267
+ for i from deg_poly-1 to 0 by -1 do
268
+ fprintf(fd, "/* coef for degree %d */ %1.50f, \n" , 2*i+3, coef_poly[i]):
269
+ od:
270
+ fprintf(fd," }; \n");
271
+
272
+ fprintf(fd,"#define A 0\n"):
273
+ fprintf(fd,"#define B 1\n"):
274
+ fprintf(fd,"#define ATAN_BHI 2\n"):
275
+ fprintf(fd,"#define ATAN_BLO 3\n"):
276
+
277
+ fprintf(fd,"\n#ifdef WORDS_BIGENDIAN\n "):
278
+
279
+ for isbig from 1 to 0 by -1 do
280
+
281
+ if(isbig=0) then
282
+ fprintf(fd,"#else\n");
283
+ fi:
284
+
285
+ if(not (nb_of_ai = nb_of_bi)) then
286
+ printf("Warning : nb_of_ai != nb_of_bi, this should not work");
287
+ fi:
288
+
289
+ fprintf(fd,"\n/* limits of the intervals [a[i],b[i]] */\n");
290
+ fprintf(fd, "static db_number const arctan_table[%d][4] = \n{\n" , nb_of_ai );
291
+
292
+ for i from 0 to nb_of_ai - 1 do
293
+ fprintf(fd, "{\n/*a[%d] */ ",i);
294
+ printendian(fd,a[i],isbig);
295
+ fprintf(fd," ,\n/*b[%d] : */ ",i):
296
+ printendian(fd,b[i],isbig):
297
+ fprintf(fd," ,\n/*atan_b[%d]*/ ",i):
298
+ printendian(fd, arctan(b[i]) ,isbig):
299
+ fprintf(fd,",");
300
+ printendian(fd, arctan(b[i])-nearest(arctan(b[i])) ,isbig);
301
+ fprintf(fd," ,\n}\n,");
302
+ od;
303
+ fprintf(fd,"\n};\n");
304
+ od:
305
+
306
+ fprintf(fd,"\n#endif\n\n"):
307
+
308
+ fprintf(fd, "#endif /* def _ATAN_FAST_H */\n");
309
+
310
+ fclose(fd);
311
+
312
+
313
+
314
+ # Scs phase
315
+
316
+ #Now we want a precision of 130 bits in order to have correct rounding in all cases.
317
+ evalf(log[2](e^21/21));
318
+ #Test about Rounding :
319
+ #error on the polynom :
320
+ P_scs := convert(series(arctan(x),x=0,21),polynom);
321
+ evalf(log[2](e^21/21));
322
+ #Intervals parameters
323
+ #We choose the same e and the same intervals as in the quick phase.
324
+
325
+ #We have the same b[i]s and a[i]s but we save atan[b[i]] on 4 doubles
326
+
327
+ # Output
328
+ filename:="TEMPATAN/atan_accurate.h":
329
+ fd1:=fopen(filename, WRITE, TEXT):
330
+
331
+ fprintf(fd1, "#include \"crlibm.h\"\n#include \"crlibm_private.h\" \n#include \"atan_fast.h\"\n"):
332
+ fprintf(fd1, "\n/*File generated by maple/atan.mpl */\n"):
333
+
334
+ Write_SCS_poly(fd1, "constant_poly", P_scs);
335
+
336
+ fprintf(fd1,"#define constant_poly_ptr (scs_ptr)&constant_poly\n");
337
+
338
+ fprintf(fd1,"#ifdef WORDS_BIGENDIAN\n\n"):
339
+ for isbig from 1 to 0 by -1 do
340
+ if isbig = 0 then
341
+ fprintf(fd1, "\n#else\n"):
342
+ fi:
343
+
344
+ fprintf(fd1,"static const db_number atan_blolo[%d] = {\n",nb_of_ai);
345
+ for i from 0 to nb_of_ai-1 do
346
+ fprintf(fd1,"/* %d */ ",i):
347
+ temp0 := nearest(arctan(b[i]));
348
+ temp := nearest( arctan(b[i]) - nearest(arctan(b[i])));
349
+ temp1 := nearest( arctan(b[i]) - temp -temp0);
350
+ printendian(fd1,temp1,isbig):
351
+ fprintf(fd1,", \n");
352
+ od:
353
+
354
+ fprintf(fd1,"};\n"):
355
+
356
+ od:
357
+ fprintf(fd1,"\n#endif /* WORDS_BIGENDIAN */ \n");
358
+
359
+ fclose(fd1);