Print this page
11210 libm should be cstyle(1ONBLD) clean
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/lib/libm/common/LD/j0l.c
+++ new/usr/src/lib/libm/common/LD/j0l.c
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
↓ open down ↓ |
14 lines elided |
↑ open up ↑ |
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21
22 22 /*
23 23 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
24 24 */
25 +
25 26 /*
26 27 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
27 28 * Use is subject to license terms.
28 29 */
29 30
30 31 /*
31 32 * Floating point Bessel's function of the first and second kinds
32 33 * of order zero: j0(x),y0(x);
33 34 *
34 35 * Special cases:
35 36 * y0(0)=y1(0)=yn(n,0) = -inf with division by zero signal;
36 37 * y0(-ve)=y1(-ve)=yn(n,-ve) are NaN with invalid signal.
37 38 */
38 39
39 40 #pragma weak __j0l = j0l
40 41 #pragma weak __y0l = y0l
↓ open down ↓ |
6 lines elided |
↑ open up ↑ |
41 42
42 43 #include "libm.h"
43 44
44 45 #include "longdouble.h"
45 46
46 47 #include <math.h>
47 48 #if defined(__SUNPRO_C)
48 49 #include <sunmath.h>
49 50 #endif
50 51
51 -#define GENERIC long double
52 -static GENERIC
53 -zero = 0.0L,
54 -small = 1.0e-9L,
55 -tiny = 1.0e-38L,
56 -one = 1.0L,
57 -five = 5.0L,
58 -eight = 8.0L,
59 -invsqrtpi = 5.641895835477562869480794515607725858441e-0001L,
60 -tpi = 0.636619772367581343075535053490057448L;
52 +#define GENERIC long double
53 +
54 +static GENERIC zero = 0.0L,
55 + small = 1.0e-9L,
56 + tiny = 1.0e-38L,
57 + one = 1.0L,
58 + five = 5.0L,
59 + eight = 8.0L,
60 + invsqrtpi = 5.641895835477562869480794515607725858441e-0001L,
61 + tpi = 0.636619772367581343075535053490057448L;
61 62
62 63 static GENERIC pzero(), qzero();
64 +
63 65 static GENERIC r0[7] = {
64 - -2.499999999999999999999999999999998934492e-0001L,
65 - 1.272657927360049786327618451133763714880e-0002L,
66 - -2.694499763712963276900636693400659600898e-0004L,
67 - 2.724877475058977576903234070919616447883e-0006L,
68 - -1.432617103214330236967477495393076320281e-0008L,
69 - 3.823248804080079168706683540513792224471e-0011L,
70 - -4.183174277567983647337568504286313665065e-0014L,
66 + -2.499999999999999999999999999999998934492e-0001L,
67 + 1.272657927360049786327618451133763714880e-0002L,
68 + -2.694499763712963276900636693400659600898e-0004L,
69 + 2.724877475058977576903234070919616447883e-0006L,
70 + -1.432617103214330236967477495393076320281e-0008L,
71 + 3.823248804080079168706683540513792224471e-0011L,
72 + -4.183174277567983647337568504286313665065e-0014L,
71 73 };
74 +
72 75 static GENERIC s0[7] = {
73 - 1.0e0L,
74 - 1.159368290559800854689526195462884666395e-0002L,
75 - 6.629397597394973383009743876169946772559e-0005L,
76 - 2.426779981394054406305431142501735094340e-0007L,
77 - 6.097663491248511069094400469635449749883e-0010L,
78 - 1.017019133340929220238747413216052224036e-0012L,
79 - 9.012593179306197579518374581969371278481e-0016L,
76 + 1.0e0L,
77 + 1.159368290559800854689526195462884666395e-0002L,
78 + 6.629397597394973383009743876169946772559e-0005L,
79 + 2.426779981394054406305431142501735094340e-0007L,
80 + 6.097663491248511069094400469635449749883e-0010L,
81 + 1.017019133340929220238747413216052224036e-0012L,
82 + 9.012593179306197579518374581969371278481e-0016L,
80 83 };
81 84
82 85 GENERIC
83 -j0l(x) GENERIC x; {
86 +j0l(GENERIC x)
87 +{
84 88 GENERIC z, s, c, ss, cc, r, u, v;
85 89 int i;
86 90
87 91 if (isnanl(x))
88 - return (x+x);
92 + return (x + x);
93 +
89 94 x = fabsl(x);
95 +
90 96 if (x > 1.28L) {
91 97 if (!finitel(x))
92 98 return (zero);
99 +
93 100 s = sinl(x);
94 101 c = cosl(x);
95 - /*
96 - * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)-q0(x)*sin(x0))
97 - * where x0 = x-pi/4
98 - * Better formula:
99 - * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4)
100 - * = 1/sqrt(2) * (cos(x) + sin(x))
101 - * sin(x0) = sin(x)cos(pi/4)-cos(x)sin(pi/4)
102 - * = 1/sqrt(2) * (sin(x) - cos(x))
103 - * To avoid cancellation, use
104 - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
105 - * to compute the worse one.
106 - */
102 +
103 + /* BEGIN CSTYLED */
104 + /*
105 + * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)-q0(x)*sin(x0))
106 + * where x0 = x-pi/4
107 + * Better formula:
108 + * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4)
109 + * = 1/sqrt(2) * (cos(x) + sin(x))
110 + * sin(x0) = sin(x)cos(pi/4)-cos(x)sin(pi/4)
111 + * = 1/sqrt(2) * (sin(x) - cos(x))
112 + * To avoid cancellation, use
113 + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
114 + * to compute the worse one.
115 + */
116 + /* END CSTYLED */
107 117 if (x > 1.0e2450L) { /* x+x may overflow */
108 - ss = s-c;
109 - cc = s+c;
118 + ss = s - c;
119 + cc = s + c;
110 120 } else if (signbitl(s) != signbitl(c)) {
111 121 ss = s - c;
112 - cc = -cosl(x+x)/ss;
122 + cc = -cosl(x + x) / ss;
113 123 } else {
114 124 cc = s + c;
115 - ss = -cosl(x+x)/cc;
125 + ss = -cosl(x + x) / cc;
116 126 }
117 - /*
118 - * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x)
119 - * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x)
120 - */
127 +
128 + /*
129 + * j0(x) = 1/sqrt(pi) * (P(0,x)*cc - Q(0,x)*ss) / sqrt(x)
130 + * y0(x) = 1/sqrt(pi) * (P(0,x)*ss + Q(0,x)*cc) / sqrt(x)
131 + */
121 132 if (x > 1.0e120L)
122 - return (invsqrtpi*cc)/sqrtl(x);
123 - u = pzero(x); v = qzero(x);
124 - return (invsqrtpi*(u*cc-v*ss)/sqrtl(x));
133 + return ((invsqrtpi * cc) / sqrtl(x));
134 +
135 + u = pzero(x);
136 + v = qzero(x);
137 + return (invsqrtpi * (u * cc - v * ss) / sqrtl(x));
125 138 }
139 +
126 140 if (x <= small) {
127 - if (x <= tiny)
128 - return (one-x);
129 - else
130 - return (one-x*x*0.25L);
141 + if (x <= tiny)
142 + return (one - x);
143 + else
144 + return (one - x * x * 0.25L);
131 145 }
132 - z = x*x;
133 - r = r0[6]; s = s0[6];
146 +
147 + z = x * x;
148 + r = r0[6];
149 + s = s0[6];
150 +
134 151 for (i = 5; i >= 0; i--) {
135 - r = r*z + r0[i];
136 - s = s*z + s0[i];
152 + r = r * z + r0[i];
153 + s = s * z + s0[i];
137 154 }
138 - return (one+z*(r/s));
155 +
156 + return (one + z * (r / s));
139 157 }
140 158
141 159 static GENERIC u0[8] = {
142 - -7.380429510868722527434392794848301631220e-0002L,
143 - 1.766855559625940791857536949301981816513e-0001L,
144 - -1.386470722701047923235553251240162839408e-0002L,
145 - 3.520149242724811578636970811631224862615e-0004L,
146 - -3.978599663243790049853642275624951870025e-0006L,
147 - 2.228801153263957224547222556806915479763e-0008L,
148 - -6.121246764298785018658597179498837316177e-0011L,
149 - 6.677103629722678833475965810525587396596e-0014L,
160 + -7.380429510868722527434392794848301631220e-0002L,
161 + 1.766855559625940791857536949301981816513e-0001L,
162 + -1.386470722701047923235553251240162839408e-0002L,
163 + 3.520149242724811578636970811631224862615e-0004L,
164 + -3.978599663243790049853642275624951870025e-0006L,
165 + 2.228801153263957224547222556806915479763e-0008L,
166 + -6.121246764298785018658597179498837316177e-0011L,
167 + 6.677103629722678833475965810525587396596e-0014L,
150 168 };
169 +
151 170 static GENERIC v0[8] = {
152 - 1.0e0L,
153 - 1.247164416539111311571676766127767127970e-0002L,
154 - 7.829144749639791500052900281489367443576e-0005L,
155 - 3.247126540422245330511218321013360336606e-0007L,
156 - 9.750516724789499678567062572549568447869e-0010L,
157 - 2.156713223173591212250543390258458098776e-0012L,
158 - 3.322169561597890004231482431236452752624e-0015L,
159 - 2.821213295314000924252226486305726805093e-0018L,
171 + 1.0e0L,
172 + 1.247164416539111311571676766127767127970e-0002L,
173 + 7.829144749639791500052900281489367443576e-0005L,
174 + 3.247126540422245330511218321013360336606e-0007L,
175 + 9.750516724789499678567062572549568447869e-0010L,
176 + 2.156713223173591212250543390258458098776e-0012L,
177 + 3.322169561597890004231482431236452752624e-0015L,
178 + 2.821213295314000924252226486305726805093e-0018L,
160 179 };
161 180
162 181 GENERIC
163 182 y0l(GENERIC x)
164 183 {
165 184 GENERIC z, s, c, ss, cc, u, v;
166 185 GENERIC d __unused;
167 186 int i;
168 187
169 188 if (isnanl(x))
170 - return (x+x);
189 + return (x + x);
190 +
171 191 if (x <= zero) {
172 192 if (x == zero)
173 - d = -one/(x-x);
193 + d = -one / (x - x);
174 194 else
175 - d = zero/(x-x);
195 + d = zero / (x - x);
176 196 }
197 +
177 198 if (x > 1.28L) {
178 199 if (!finitel(x))
179 200 return (zero);
201 +
180 202 s = sinl(x);
181 203 c = cosl(x);
182 - /*
183 - * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)-q0(x)*sin(x0))
184 - * where x0 = x-pi/4
185 - * Better formula:
186 - * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4)
187 - * = 1/sqrt(2) * (cos(x) + sin(x))
188 - * sin(x0) = sin(x)cos(pi/4)-cos(x)sin(pi/4)
189 - * = 1/sqrt(2) * (sin(x) - cos(x))
190 - * To avoid cancellation, use
191 - * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
192 - * to compute the worse one.
193 - */
204 +
205 + /* BEGIN CSTYLED */
206 + /*
207 + * j0(x) = sqrt(2/(pi*x))*(p0(x)*cos(x0)-q0(x)*sin(x0))
208 + * where x0 = x-pi/4
209 + * Better formula:
210 + * cos(x0) = cos(x)cos(pi/4)+sin(x)sin(pi/4)
211 + * = 1/sqrt(2) * (cos(x) + sin(x))
212 + * sin(x0) = sin(x)cos(pi/4)-cos(x)sin(pi/4)
213 + * = 1/sqrt(2) * (sin(x) - cos(x))
214 + * To avoid cancellation, use
215 + * sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
216 + * to compute the worse one.
217 + */
218 + /* END CSTYLED */
194 219 if (x > 1.0e2450L) { /* x+x may overflow */
195 - ss = s-c;
196 - cc = s+c;
220 + ss = s - c;
221 + cc = s + c;
197 222 } else if (signbitl(s) != signbitl(c)) {
198 223 ss = s - c;
199 - cc = -cosl(x+x)/ss;
224 + cc = -cosl(x + x) / ss;
200 225 } else {
201 226 cc = s + c;
202 - ss = -cosl(x+x)/cc;
227 + ss = -cosl(x + x) / cc;
203 228 }
204 - /*
205 - * j0(x) = 1/sqrt(pi*x) * (P(0,x)*cc - Q(0,x)*ss)
206 - * y0(x) = 1/sqrt(pi*x) * (P(0,x)*ss + Q(0,x)*cc)
207 - */
229 +
230 + /*
231 + * j0(x) = 1/sqrt(pi*x) * (P(0,x)*cc - Q(0,x)*ss)
232 + * y0(x) = 1/sqrt(pi*x) * (P(0,x)*ss + Q(0,x)*cc)
233 + */
208 234 if (x > 1.0e120L)
209 - return (invsqrtpi*ss)/sqrtl(x);
210 - return (invsqrtpi*(pzero(x)*ss+qzero(x)*cc)/sqrtl(x));
235 + return ((invsqrtpi * ss) / sqrtl(x));
211 236
237 + return (invsqrtpi * (pzero(x) * ss + qzero(x) * cc) / sqrtl(x));
212 238 }
213 - if (x <= tiny) {
214 - return (u0[0] + tpi*logl(x));
215 - }
216 - z = x*x;
217 - u = u0[7]; v = v0[7];
239 +
240 + if (x <= tiny)
241 + return (u0[0] + tpi * logl(x));
242 +
243 + z = x * x;
244 + u = u0[7];
245 + v = v0[7];
246 +
218 247 for (i = 6; i >= 0; i--) {
219 - u = u*z + u0[i];
220 - v = v*z + v0[i];
248 + u = u * z + u0[i];
249 + v = v * z + v0[i];
221 250 }
222 - return (u/v + tpi*(j0l(x)*logl(x)));
251 +
252 + return (u / v + tpi * (j0l(x) * logl(x)));
223 253 }
224 254
225 -static GENERIC pr0[12] = { /* [16 -- inf] */
226 - 9.999999999999999999999999999999999997515e-0001L,
227 - 1.065981615377273376425365823967550598358e+0003L,
228 - 4.390991200927588978306374718984240719130e+0005L,
229 - 9.072086218607986711847069407339321363103e+0007L,
230 - 1.022552886177375367408408501046461671528e+0010L,
231 - 6.420766912243658241570635854089597269031e+0011L,
232 - 2.206451725126933913591080211081242266908e+0013L,
233 - 3.928369596816895077363705478743346298368e+0014L,
234 - 3.258159928874124597286701119721482876596e+0015L,
235 - 1.025715808134188978860679130140685101348e+0016L,
236 - 7.537170874795721255796001687024031280685e+0015L,
237 - -1.579413901450157332307745586004207687796e+0014L,
255 +static GENERIC pr0[12] = { /* [16 -- inf] */
256 + 9.999999999999999999999999999999999997515e-0001L,
257 + 1.065981615377273376425365823967550598358e+0003L,
258 + 4.390991200927588978306374718984240719130e+0005L,
259 + 9.072086218607986711847069407339321363103e+0007L,
260 + 1.022552886177375367408408501046461671528e+0010L,
261 + 6.420766912243658241570635854089597269031e+0011L,
262 + 2.206451725126933913591080211081242266908e+0013L,
263 + 3.928369596816895077363705478743346298368e+0014L,
264 + 3.258159928874124597286701119721482876596e+0015L,
265 + 1.025715808134188978860679130140685101348e+0016L,
266 + 7.537170874795721255796001687024031280685e+0015L,
267 + -1.579413901450157332307745586004207687796e+0014L,
238 268 };
269 +
239 270 static GENERIC ps0[11] = {
240 - 1.0e0L,
241 - 1.066051927877273376425365823967550512687e+0003L,
242 - 4.391739647168381592399173804329266353038e+0005L,
243 - 9.075162261801343671805658294123888867884e+0007L,
244 - 1.023186118519904751819581912075985995058e+0010L,
245 - 6.427861860414223746340515376512730275061e+0011L,
246 - 2.210861503237823589735481303627993406235e+0013L,
247 - 3.943247335784292905915956840901818177989e+0014L,
248 - 3.283720976777545142150200110647270004481e+0015L,
249 - 1.045346918812754048903645641538728986759e+0016L,
250 - 8.043455468065618900750599584291193680463e+0015L,
251 -};
252 -static GENERIC pr1[12] = { /* [8 -- 16] */
253 - 9.999999999999999999999784422701108683618e-0001L,
254 - 6.796098532948334207755488692777907062894e+0002L,
255 - 1.840036112605722168824530758797169836042e+0005L,
256 - 2.598490483191916637264894340635847598122e+0007L,
257 - 2.105774863242707025525730249472054578523e+0009L,
258 - 1.015822044230542426666314997796944979959e+0011L,
259 - 2.931557457008110436764077699944189071875e+0012L,
260 - 4.962885121125457633655259224179322808824e+0013L,
261 - 4.705424055148223269155430598563351566279e+0014L,
262 - 2.294439854910747229152056080910427001110e+0015L,
263 - 4.905531843137486691500950019322475458629e+0015L,
264 - 3.187543169710339218793442542845735994565e+0015L,
271 + 1.0e0L,
272 + 1.066051927877273376425365823967550512687e+0003L,
273 + 4.391739647168381592399173804329266353038e+0005L,
274 + 9.075162261801343671805658294123888867884e+0007L,
275 + 1.023186118519904751819581912075985995058e+0010L,
276 + 6.427861860414223746340515376512730275061e+0011L,
277 + 2.210861503237823589735481303627993406235e+0013L,
278 + 3.943247335784292905915956840901818177989e+0014L,
279 + 3.283720976777545142150200110647270004481e+0015L,
280 + 1.045346918812754048903645641538728986759e+0016L,
281 + 8.043455468065618900750599584291193680463e+0015L,
282 +};
283 +
284 +static GENERIC pr1[12] = { /* [8 -- 16] */
285 + 9.999999999999999999999784422701108683618e-0001L,
286 + 6.796098532948334207755488692777907062894e+0002L,
287 + 1.840036112605722168824530758797169836042e+0005L,
288 + 2.598490483191916637264894340635847598122e+0007L,
289 + 2.105774863242707025525730249472054578523e+0009L,
290 + 1.015822044230542426666314997796944979959e+0011L,
291 + 2.931557457008110436764077699944189071875e+0012L,
292 + 4.962885121125457633655259224179322808824e+0013L,
293 + 4.705424055148223269155430598563351566279e+0014L,
294 + 2.294439854910747229152056080910427001110e+0015L,
295 + 4.905531843137486691500950019322475458629e+0015L,
296 + 3.187543169710339218793442542845735994565e+0015L,
265 297 };
298 +
266 299 static GENERIC ps1[14] = {
267 - 1.0e0L,
268 - 6.796801657948334207754571576066758180288e+0002L,
269 - 1.840512891201300567325421059826676366447e+0005L,
270 - 2.599777028312918975306252167127695075221e+0007L,
271 - 2.107582572771047636846811284634244892537e+0009L,
272 - 1.017275794694156108975782763889979940348e+0011L,
273 - 2.938487645192463845428059755454762316011e+0012L,
274 - 4.982512164735557054521042916182317924466e+0013L,
275 - 4.737639900153703274792677468264564361437e+0014L,
276 - 2.323398719123742743524249528275097100646e+0015L,
277 - 5.033419107069210577868909797896984419391e+0015L,
278 - 3.409036105931068609601317076759804716059e+0015L,
279 - 7.505655364352679737585745147753521662166e+0013L,
280 - -9.976837153983688250780198248297109118313e+0012L,
281 -};
282 -static GENERIC pr2[12] = { /* [5 -- 8 ] */
283 - 9.999999999999999937857236789277366320220e-0001L,
284 - 3.692848765268649571651602420376358849214e+0002L,
285 - 5.373022067535476576926715900057760985410e+0004L,
286 - 4.038738891191314969971504035057219430725e+0006L,
287 - 1.728285706306940523397385566659762646999e+0008L,
288 - 4.375400819645889911158688737206054788534e+0009L,
289 - 6.598950418204912408375591217782088567076e+0010L,
290 - 5.827182039183238492480275401520072793783e+0011L,
291 - 2.884222642913492390887572414999490975844e+0012L,
292 - 7.373278873797767721932837830628688632775e+0012L,
293 - 8.338295457568973761205077964397969230489e+0012L,
294 - 2.911383183467288345772308817209806922143e+0012L,
300 + 1.0e0L,
301 + 6.796801657948334207754571576066758180288e+0002L,
302 + 1.840512891201300567325421059826676366447e+0005L,
303 + 2.599777028312918975306252167127695075221e+0007L,
304 + 2.107582572771047636846811284634244892537e+0009L,
305 + 1.017275794694156108975782763889979940348e+0011L,
306 + 2.938487645192463845428059755454762316011e+0012L,
307 + 4.982512164735557054521042916182317924466e+0013L,
308 + 4.737639900153703274792677468264564361437e+0014L,
309 + 2.323398719123742743524249528275097100646e+0015L,
310 + 5.033419107069210577868909797896984419391e+0015L,
311 + 3.409036105931068609601317076759804716059e+0015L,
312 + 7.505655364352679737585745147753521662166e+0013L,
313 + -9.976837153983688250780198248297109118313e+0012L,
314 +};
315 +
316 +static GENERIC pr2[12] = { /* [5 -- 8 ] */
317 + 9.999999999999999937857236789277366320220e-0001L,
318 + 3.692848765268649571651602420376358849214e+0002L,
319 + 5.373022067535476576926715900057760985410e+0004L,
320 + 4.038738891191314969971504035057219430725e+0006L,
321 + 1.728285706306940523397385566659762646999e+0008L,
322 + 4.375400819645889911158688737206054788534e+0009L,
323 + 6.598950418204912408375591217782088567076e+0010L,
324 + 5.827182039183238492480275401520072793783e+0011L,
325 + 2.884222642913492390887572414999490975844e+0012L,
326 + 7.373278873797767721932837830628688632775e+0012L,
327 + 8.338295457568973761205077964397969230489e+0012L,
328 + 2.911383183467288345772308817209806922143e+0012L,
295 329 };
330 +
296 331 static GENERIC ps2[14] = {
297 - 1.0e0L,
298 - 3.693551890268649477288896267171993213102e+0002L,
299 - 5.375607880998361502474715133828068514297e+0004L,
300 - 4.042477764024108249744998862572786367328e+0006L,
301 - 1.731069838737016956685839588670132939513e+0008L,
302 - 4.387147674049898778738226585935491417728e+0009L,
303 - 6.628058659620653765349556940567715258165e+0010L,
304 - 5.869659904164177740471685856367322160664e+0011L,
305 - 2.919839445622817017058977559638969436383e+0012L,
306 - 7.535314897696671402628203718612309253907e+0012L,
307 - 8.696355561452933775773309859748610658935e+0012L,
308 - 3.216155103141537221173601557697083216257e+0012L,
309 - 4.756857081068942248246880159213789086363e+0010L,
310 - -3.496356619666608032231074866481472824067e+0009L,
311 -};
312 -static GENERIC pr3[13] = { /* [3.5 -- 5 ] */
313 - 9.999999999999916693107285612398196588247e-0001L,
314 - 2.263975921282917721194425320484974336945e+0002L,
315 - 1.994358386744245848889492762781484199966e+0004L,
316 - 8.980067458430542243559962493831661323168e+0005L,
317 - 2.282213787521372663705567756420087553508e+0007L,
318 - 3.409784374889063618250288699908375135923e+0008L,
319 - 3.024380857401448589254343517589811711108e+0009L,
320 - 1.571110368046740246895071721443082286379e+0010L,
321 - 4.603187020243604632153685300463160593768e+0010L,
322 - 7.087196453409712719449549280664058793403e+0010L,
323 - 5.046196021776346356803687409644239065041e+0010L,
324 - 1.287758439080165765709154276618854799932e+0010L,
325 - 5.900679773415023433787846658096813590784e+0008L,
332 + 1.0e0L,
333 + 3.693551890268649477288896267171993213102e+0002L,
334 + 5.375607880998361502474715133828068514297e+0004L,
335 + 4.042477764024108249744998862572786367328e+0006L,
336 + 1.731069838737016956685839588670132939513e+0008L,
337 + 4.387147674049898778738226585935491417728e+0009L,
338 + 6.628058659620653765349556940567715258165e+0010L,
339 + 5.869659904164177740471685856367322160664e+0011L,
340 + 2.919839445622817017058977559638969436383e+0012L,
341 + 7.535314897696671402628203718612309253907e+0012L,
342 + 8.696355561452933775773309859748610658935e+0012L,
343 + 3.216155103141537221173601557697083216257e+0012L,
344 + 4.756857081068942248246880159213789086363e+0010L,
345 + -3.496356619666608032231074866481472824067e+0009L,
346 +};
347 +
348 +static GENERIC pr3[13] = { /* [3.5 -- 5 ] */
349 + 9.999999999999916693107285612398196588247e-0001L,
350 + 2.263975921282917721194425320484974336945e+0002L,
351 + 1.994358386744245848889492762781484199966e+0004L,
352 + 8.980067458430542243559962493831661323168e+0005L,
353 + 2.282213787521372663705567756420087553508e+0007L,
354 + 3.409784374889063618250288699908375135923e+0008L,
355 + 3.024380857401448589254343517589811711108e+0009L,
356 + 1.571110368046740246895071721443082286379e+0010L,
357 + 4.603187020243604632153685300463160593768e+0010L,
358 + 7.087196453409712719449549280664058793403e+0010L,
359 + 5.046196021776346356803687409644239065041e+0010L,
360 + 1.287758439080165765709154276618854799932e+0010L,
361 + 5.900679773415023433787846658096813590784e+0008L,
326 362 };
363 +
327 364 static GENERIC ps3[13] = {
328 - 1.0e0L,
329 - 2.264679046282855061328604619231774747116e+0002L,
330 - 1.995939523988944553755653255389812103448e+0004L,
331 - 8.993853144706348727038389967490183236820e+0005L,
332 - 2.288326099634588843906989983704795468773e+0007L,
333 - 3.424967100255240885169240956804790118282e+0008L,
334 - 3.046311797972463991368023759640028910016e+0009L,
335 - 1.589614961932826812790222479700797224003e+0010L,
336 - 4.692406624527744816497089139325073939927e+0010L,
337 - 7.320486495902008912866462849073108323948e+0010L,
338 - 5.345945972828978289935309597742981360994e+0010L,
339 - 1.444033091910423754121309915092247171008e+0010L,
340 - 7.987714685115314668378957273824383610525e+0008L,
341 -};
342 -static GENERIC pr4[13] = { /* [2.5, 3.5] */
343 - 9.999999999986736677961118722747757712260e-0001L,
344 - 1.453824980703800559037873123568378845663e+0002L,
345 - 8.097327216430682288267610447006508661032e+0003L,
346 - 2.273847252038264370231169686380192662135e+0005L,
347 - 3.561056728046211111354759998976985449622e+0006L,
348 - 3.244933588800096378434627029369680378599e+0007L,
349 - 1.740112392860717950376210038908476792588e+0008L,
350 - 5.426170187455893285197878563881579269524e+0008L,
351 - 9.490107486454362321004377336020526281371e+0008L,
352 - 8.688872439428470049801714121070005313806e+0008L,
353 - 3.673315853166437222811910656900123215515e+0008L,
354 - 5.577770470359303305164877446339693270239e+0007L,
355 - 1.540438642031689641308197880181291865714e+0006L,
356 -};
357 -static GENERIC ps4[13] = { /* [2.5, 3.5] */
358 - 1.0e0L,
359 - 1.454528105698159439773035951959131799816e+0002L,
360 - 8.107442215200392397172179900434987859618e+0003L,
361 - 2.279390393778242887574177096606328994140e+0005L,
362 - 3.576251625592252008424781111770934135844e+0006L,
363 - 3.267909499056932631405942058670933813863e+0007L,
364 - 1.760021515330805537499778238099704648805e+0008L,
365 - 5.525553787667353981242060222587465726729e+0008L,
366 - 9.769870295912820457889384082671269328511e+0008L,
367 - 9.110582071004774279226905629624018008454e+0008L,
368 - 3.981857678621955599371967680343918454345e+0008L,
369 - 6.482404686230769399073192961667697036706e+0007L,
370 - 2.210046943095878402443535460329391782298e+0006L,
371 -};
372 -static GENERIC pr5[13] = { /* [1.777..., 2.5] */
373 - 9.999999999114986107951817871144655880699e-0001L,
374 - 9.252583736048588342568344570315435947614e+0001L,
375 - 3.218726757856078715214631502407386264637e+0003L,
376 - 5.554009964621111656479588505862577040831e+0004L,
377 - 5.269993115643664338253196944523510290175e+0005L,
378 - 2.874613773778430691192912190618220544575e+0006L,
379 - 9.133538151103658353874146919613442436035e+0006L,
380 - 1.673067041410338922825193013077354249193e+0007L,
381 - 1.706913873848398011744790289200151840498e+0007L,
382 - 9.067766583853288534551600235576747618679e+0006L,
383 - 2.216746733457884568532695355036338655872e+0006L,
384 - 1.945753880802872541235703812722344514405e+0005L,
385 - 3.132374412921948071539195638885330951749e+0003L,
386 -};
387 -static GENERIC ps5[13] = { /* [1.777..., 2.5] */
388 - 1.0e0L,
389 - 9.259614983862181118883831670990340052982e+0001L,
390 - 3.225125275462903384842124075132609290304e+0003L,
391 - 5.575705362829101545292760055941855246492e+0004L,
392 - 5.306049863037087855496170121958448492522e+0005L,
393 - 2.907060758873509564309729903109018597215e+0006L,
394 - 9.298059206584995898298257827131208539289e+0006L,
395 - 1.720391071006963176836108026556547062980e+0007L,
396 - 1.782614812922865190479394509487941920612e+0007L,
397 - 9.708016389605273153536452032839879950155e+0006L,
398 - 2.476495084688170096480215640962175140027e+0006L,
399 - 2.363200660365585759668077790194604917187e+0005L,
400 - 4.803239569848196077121203575704356936731e+0003L,
401 -};
402 -static GENERIC pr6[13] = { /* [1.28, 1.777...] */
403 - 9.999999969777095495998606925524322559556e-0001L,
404 - 5.825486719466194430503283824096872219216e+0001L,
405 - 1.248155491637757281915184824965379905380e+0003L,
406 - 1.302093199842358609321338417071710477615e+0004L,
407 - 7.353835804186292782840961999810543016039e+0004L,
408 - 2.356471661113686180549195092555751341757e+0005L,
409 - 4.350553267429009581632987060942780847101e+0005L,
410 - 4.588762661876600638719159826652389418235e+0005L,
411 - 2.675796398548523436544221045225290128611e+0005L,
412 - 8.077649557108971388298292919988449940464e+0004L,
413 - 1.117640459221306873519068741664054573776e+0004L,
414 - 5.544400072396814695175787511557757885585e+0002L,
415 - 5.072550541191480498431289089905822910718e+0000L,
416 -};
417 -static GENERIC ps6[13] = { /* [1.28, 1.777...] */
418 - 1.0e0L,
419 - 5.832517925357165050639075848183613063291e+0001L,
420 - 1.252144364743592128171256104364976466898e+0003L,
421 - 1.310300234342216813579118022415585740772e+0004L,
422 - 7.434667697093812197817292154032863632923e+0004L,
423 - 2.398706595587719165726469002404004614711e+0005L,
424 - 4.472737517625103157004869372427480602511e+0005L,
425 - 4.786313523337761975294171429067037723611e+0005L,
426 - 2.851161872872731228472536061865365370192e+0005L,
427 - 8.891648269899148412331918021801385815586e+0004L,
428 - 1.297097489535351517572978123584751042287e+0004L,
429 - 7.096761640545975756202184143400469812618e+0002L,
430 - 8.378049338590233325977702401733340820351e+0000L,
365 + 1.0e0L,
366 + 2.264679046282855061328604619231774747116e+0002L,
367 + 1.995939523988944553755653255389812103448e+0004L,
368 + 8.993853144706348727038389967490183236820e+0005L,
369 + 2.288326099634588843906989983704795468773e+0007L,
370 + 3.424967100255240885169240956804790118282e+0008L,
371 + 3.046311797972463991368023759640028910016e+0009L,
372 + 1.589614961932826812790222479700797224003e+0010L,
373 + 4.692406624527744816497089139325073939927e+0010L,
374 + 7.320486495902008912866462849073108323948e+0010L,
375 + 5.345945972828978289935309597742981360994e+0010L,
376 + 1.444033091910423754121309915092247171008e+0010L,
377 + 7.987714685115314668378957273824383610525e+0008L,
378 +};
379 +
380 +static GENERIC pr4[13] = { /* [2.5, 3.5] */
381 + 9.999999999986736677961118722747757712260e-0001L,
382 + 1.453824980703800559037873123568378845663e+0002L,
383 + 8.097327216430682288267610447006508661032e+0003L,
384 + 2.273847252038264370231169686380192662135e+0005L,
385 + 3.561056728046211111354759998976985449622e+0006L,
386 + 3.244933588800096378434627029369680378599e+0007L,
387 + 1.740112392860717950376210038908476792588e+0008L,
388 + 5.426170187455893285197878563881579269524e+0008L,
389 + 9.490107486454362321004377336020526281371e+0008L,
390 + 8.688872439428470049801714121070005313806e+0008L,
391 + 3.673315853166437222811910656900123215515e+0008L,
392 + 5.577770470359303305164877446339693270239e+0007L,
393 + 1.540438642031689641308197880181291865714e+0006L,
394 +};
395 +
396 +static GENERIC ps4[13] = { /* [2.5, 3.5] */
397 + 1.0e0L,
398 + 1.454528105698159439773035951959131799816e+0002L,
399 + 8.107442215200392397172179900434987859618e+0003L,
400 + 2.279390393778242887574177096606328994140e+0005L,
401 + 3.576251625592252008424781111770934135844e+0006L,
402 + 3.267909499056932631405942058670933813863e+0007L,
403 + 1.760021515330805537499778238099704648805e+0008L,
404 + 5.525553787667353981242060222587465726729e+0008L,
405 + 9.769870295912820457889384082671269328511e+0008L,
406 + 9.110582071004774279226905629624018008454e+0008L,
407 + 3.981857678621955599371967680343918454345e+0008L,
408 + 6.482404686230769399073192961667697036706e+0007L,
409 + 2.210046943095878402443535460329391782298e+0006L,
410 +};
411 +
412 +static GENERIC pr5[13] = { /* [1.777..., 2.5] */
413 + 9.999999999114986107951817871144655880699e-0001L,
414 + 9.252583736048588342568344570315435947614e+0001L,
415 + 3.218726757856078715214631502407386264637e+0003L,
416 + 5.554009964621111656479588505862577040831e+0004L,
417 + 5.269993115643664338253196944523510290175e+0005L,
418 + 2.874613773778430691192912190618220544575e+0006L,
419 + 9.133538151103658353874146919613442436035e+0006L,
420 + 1.673067041410338922825193013077354249193e+0007L,
421 + 1.706913873848398011744790289200151840498e+0007L,
422 + 9.067766583853288534551600235576747618679e+0006L,
423 + 2.216746733457884568532695355036338655872e+0006L,
424 + 1.945753880802872541235703812722344514405e+0005L,
425 + 3.132374412921948071539195638885330951749e+0003L,
426 +};
427 +
428 +static GENERIC ps5[13] = { /* [1.777..., 2.5] */
429 + 1.0e0L,
430 + 9.259614983862181118883831670990340052982e+0001L,
431 + 3.225125275462903384842124075132609290304e+0003L,
432 + 5.575705362829101545292760055941855246492e+0004L,
433 + 5.306049863037087855496170121958448492522e+0005L,
434 + 2.907060758873509564309729903109018597215e+0006L,
435 + 9.298059206584995898298257827131208539289e+0006L,
436 + 1.720391071006963176836108026556547062980e+0007L,
437 + 1.782614812922865190479394509487941920612e+0007L,
438 + 9.708016389605273153536452032839879950155e+0006L,
439 + 2.476495084688170096480215640962175140027e+0006L,
440 + 2.363200660365585759668077790194604917187e+0005L,
441 + 4.803239569848196077121203575704356936731e+0003L,
442 +};
443 +
444 +static GENERIC pr6[13] = { /* [1.28, 1.777...] */
445 + 9.999999969777095495998606925524322559556e-0001L,
446 + 5.825486719466194430503283824096872219216e+0001L,
447 + 1.248155491637757281915184824965379905380e+0003L,
448 + 1.302093199842358609321338417071710477615e+0004L,
449 + 7.353835804186292782840961999810543016039e+0004L,
450 + 2.356471661113686180549195092555751341757e+0005L,
451 + 4.350553267429009581632987060942780847101e+0005L,
452 + 4.588762661876600638719159826652389418235e+0005L,
453 + 2.675796398548523436544221045225290128611e+0005L,
454 + 8.077649557108971388298292919988449940464e+0004L,
455 + 1.117640459221306873519068741664054573776e+0004L,
456 + 5.544400072396814695175787511557757885585e+0002L,
457 + 5.072550541191480498431289089905822910718e+0000L,
458 +};
459 +
460 +static GENERIC ps6[13] = { /* [1.28, 1.777...] */
461 + 1.0e0L,
462 + 5.832517925357165050639075848183613063291e+0001L,
463 + 1.252144364743592128171256104364976466898e+0003L,
464 + 1.310300234342216813579118022415585740772e+0004L,
465 + 7.434667697093812197817292154032863632923e+0004L,
466 + 2.398706595587719165726469002404004614711e+0005L,
467 + 4.472737517625103157004869372427480602511e+0005L,
468 + 4.786313523337761975294171429067037723611e+0005L,
469 + 2.851161872872731228472536061865365370192e+0005L,
470 + 8.891648269899148412331918021801385815586e+0004L,
471 + 1.297097489535351517572978123584751042287e+0004L,
472 + 7.096761640545975756202184143400469812618e+0002L,
473 + 8.378049338590233325977702401733340820351e+0000L,
431 474 };
475 +
432 476 static GENERIC sixteen = 16.0L;
433 -static GENERIC huge = 1.0e30L;
477 +static GENERIC huge = 1.0e30L;
434 478
435 -static GENERIC pzero(x)
436 -GENERIC x;
479 +static GENERIC
480 +pzero(x)
481 + GENERIC x;
437 482 {
438 483 GENERIC s, r, t, z;
439 484 int i;
485 +
440 486 if (x > huge)
441 487 return (one);
442 - t = one/x; z = t*t;
488 +
489 + t = one / x;
490 + z = t * t;
491 +
443 492 if (x > sixteen) {
444 - r = z*pr0[11]+pr0[10]; s = ps0[10];
445 - for (i = 9; i >= 0; i--) {
446 - r = z*r + pr0[i];
447 - s = z*s + ps0[i];
448 - }
493 + r = z * pr0[11] + pr0[10];
494 + s = ps0[10];
495 +
496 + for (i = 9; i >= 0; i--) {
497 + r = z * r + pr0[i];
498 + s = z * s + ps0[i];
499 + }
449 500 } else if (x > eight) {
450 - r = pr1[11]; s = ps1[11]+z*(ps1[12]+z*ps1[13]);
451 - for (i = 10; i >= 0; i--) {
452 - r = z*r + pr1[i];
453 - s = z*s + ps1[i];
454 - }
455 - } else if (x > five) { /* x > 5.0 */
456 - r = pr2[11]; s = ps2[11]+z*(ps2[12]+z*ps2[13]);
457 - for (i = 10; i >= 0; i--) {
458 - r = z*r + pr2[i];
459 - s = z*s + ps2[i];
460 - }
501 + r = pr1[11];
502 + s = ps1[11] + z * (ps1[12] + z * ps1[13]);
503 +
504 + for (i = 10; i >= 0; i--) {
505 + r = z * r + pr1[i];
506 + s = z * s + ps1[i];
507 + }
508 + } else if (x > five) { /* x > 5.0 */
509 + r = pr2[11];
510 + s = ps2[11] + z * (ps2[12] + z * ps2[13]);
511 +
512 + for (i = 10; i >= 0; i--) {
513 + r = z * r + pr2[i];
514 + s = z * s + ps2[i];
515 + }
461 516 } else if (x > 3.5L) {
462 - r = pr3[12]; s = ps3[12];
463 - for (i = 11; i >= 0; i--) {
464 - r = z*r + pr3[i];
465 - s = z*s + ps3[i];
466 - }
517 + r = pr3[12];
518 + s = ps3[12];
519 +
520 + for (i = 11; i >= 0; i--) {
521 + r = z * r + pr3[i];
522 + s = z * s + ps3[i];
523 + }
467 524 } else if (x > 2.5L) {
468 - r = pr4[12]; s = ps4[12];
469 - for (i = 11; i >= 0; i--) {
470 - r = z*r + pr4[i];
471 - s = z*s + ps4[i];
472 - }
473 - } else if (x > (1.0L/0.5625L)) {
474 - r = pr5[12]; s = ps5[12];
475 - for (i = 11; i >= 0; i--) {
476 - r = z*r + pr5[i];
477 - s = z*s + ps5[i];
478 - }
479 - } else { /* assume x > 1.28 */
480 - r = pr6[12]; s = ps6[12];
481 - for (i = 11; i >= 0; i--) {
482 - r = z*r + pr6[i];
483 - s = z*s + ps6[i];
484 - }
485 - }
486 - return (r/s);
487 -}
525 + r = pr4[12];
526 + s = ps4[12];
488 527
528 + for (i = 11; i >= 0; i--) {
529 + r = z * r + pr4[i];
530 + s = z * s + ps4[i];
531 + }
532 + } else if (x > (1.0L / 0.5625L)) {
533 + r = pr5[12];
534 + s = ps5[12];
535 +
536 + for (i = 11; i >= 0; i--) {
537 + r = z * r + pr5[i];
538 + s = z * s + ps5[i];
539 + }
540 + } else { /* assume x > 1.28 */
541 + r = pr6[12];
542 + s = ps6[12];
543 +
544 + for (i = 11; i >= 0; i--) {
545 + r = z * r + pr6[i];
546 + s = z * s + ps6[i];
547 + }
548 + }
489 549
490 -static GENERIC qr0[12] = { /* [16, inf] */
491 - -1.249999999999999999999999999999999972972e-0001L,
492 - -1.425179595545670577414395762503991596897e+0002L,
493 - -6.312499645625970845534460257936222407219e+0004L,
494 - -1.411374326457208384315121243698814446848e+0007L,
495 - -1.735034212758873581410984757860787252842e+0009L,
496 - -1.199777647512789489421826342485055280680e+0011L,
497 - -4.596025334081655714499860409699100373644e+0012L,
498 - -9.262525628201284107792924477031653399187e+0013L,
499 - -8.858394728685039245344398842180662867639e+0014L,
500 - -3.267527953687534887623740622709505972113e+0015L,
501 - -2.664222971186311967587129347029450062019e+0015L,
502 - 3.442464060723987869585180095344504100204e+0014L,
550 + return (r / s);
551 +}
552 +static GENERIC qr0[12] = { /* [16, inf] */
553 + -1.249999999999999999999999999999999972972e-0001L,
554 + -1.425179595545670577414395762503991596897e+0002L,
555 + -6.312499645625970845534460257936222407219e+0004L,
556 + -1.411374326457208384315121243698814446848e+0007L,
557 + -1.735034212758873581410984757860787252842e+0009L,
558 + -1.199777647512789489421826342485055280680e+0011L,
559 + -4.596025334081655714499860409699100373644e+0012L,
560 + -9.262525628201284107792924477031653399187e+0013L,
561 + -8.858394728685039245344398842180662867639e+0014L,
562 + -3.267527953687534887623740622709505972113e+0015L,
563 + -2.664222971186311967587129347029450062019e+0015L,
564 + 3.442464060723987869585180095344504100204e+0014L,
503 565 };
566 +
504 567 static GENERIC qs0[11] = {
505 - 1.0e0L,
506 - 1.140729613936536461931516610003185687881e+0003L,
507 - 5.056665510442299351009198186490085803580e+0005L,
508 - 1.132041763825642787943941650522718199115e+0008L,
509 - 1.394570111872581606392620678214246479767e+0010L,
510 - 9.677945218152264789534431079563744378421e+0011L,
511 - 3.731140327851536828225143058896348502096e+0013L,
512 - 7.612785951064869291722846681020881676410e+0014L,
513 - 7.476077016406764891730191004811863975940e+0015L,
514 - 2.951246482613592035421503427100393831709e+0016L,
515 - 3.108361803691811711136854587074302034901e+0016L,
516 -};
517 -static GENERIC qr1[12] = { /* [8, 16 ] */
518 - -1.249999999999999999997949010383433818157e-0001L,
519 - -9.051215166393822640636752244895124126934e+0001L,
520 - -2.620782703428148837671179031904208303947e+0004L,
521 - -3.975571261553504457766177974508785790884e+0006L,
522 - -3.479029330759311306270072218074074994090e+0008L,
523 - -1.823955008124268573036216746186239829089e+0010L,
524 - -5.765932697111801375765156029221568664435e+0011L,
525 - -1.079843680798742592954002192417934779114e+0013L,
526 - -1.146893630504592739082205764611581332897e+0014L,
527 - -6.367016059683898464936104447282880704182e+0014L,
528 - -1.583109041961213490464459111903484209098e+0015L,
529 - -1.230149555764242473103128650135795639412e+0015L,
568 + 1.0e0L,
569 + 1.140729613936536461931516610003185687881e+0003L,
570 + 5.056665510442299351009198186490085803580e+0005L,
571 + 1.132041763825642787943941650522718199115e+0008L,
572 + 1.394570111872581606392620678214246479767e+0010L,
573 + 9.677945218152264789534431079563744378421e+0011L,
574 + 3.731140327851536828225143058896348502096e+0013L,
575 + 7.612785951064869291722846681020881676410e+0014L,
576 + 7.476077016406764891730191004811863975940e+0015L,
577 + 2.951246482613592035421503427100393831709e+0016L,
578 + 3.108361803691811711136854587074302034901e+0016L,
579 +};
580 +
581 +static GENERIC qr1[12] = { /* [8, 16 ] */
582 + -1.249999999999999999997949010383433818157e-0001L,
583 + -9.051215166393822640636752244895124126934e+0001L,
584 + -2.620782703428148837671179031904208303947e+0004L,
585 + -3.975571261553504457766177974508785790884e+0006L,
586 + -3.479029330759311306270072218074074994090e+0008L,
587 + -1.823955008124268573036216746186239829089e+0010L,
588 + -5.765932697111801375765156029221568664435e+0011L,
589 + -1.079843680798742592954002192417934779114e+0013L,
590 + -1.146893630504592739082205764611581332897e+0014L,
591 + -6.367016059683898464936104447282880704182e+0014L,
592 + -1.583109041961213490464459111903484209098e+0015L,
593 + -1.230149555764242473103128650135795639412e+0015L,
530 594 };
595 +
531 596 static GENERIC qs1[14] = {
532 - 1.0e0L,
533 - 7.246831508115058112438579847778014458432e+0002L,
534 - 2.100854184439168518399383786306927037611e+0005L,
535 - 3.192636418837951507430188285940994235122e+0007L,
536 - 2.801558443383354674538443461124434216152e+0009L,
537 - 1.475026997664373739293483927250653467487e+0011L,
538 - 4.694486824913954608552363821799927145318e+0012L,
539 - 8.890350100919200250838438709601547334021e+0013L,
540 - 9.626844429082905144874701068760469752067e+0014L,
541 - 5.541110744600460773528263862687521642140e+0015L,
542 - 1.486500494789452556727470329232123096563e+0016L,
543 - 1.415840104845959400365430773732093899210e+0016L,
544 - 1.780866095241517418081312567239682336483e+0015L,
545 - -2.359230917384889357887631544079990129494e+0014L,
546 -};
547 -static GENERIC qr2[12] = { /* [5, 8] */
548 - -1.249999999999999531937744362527772181614e-0001L,
549 - -4.944373897356969774839375977239241573966e+0001L,
550 - -7.728449175433465285314261650078450473909e+0003L,
551 - -6.262574329612752346336901434651220705903e+0005L,
552 - -2.900948220220943306027235217424380672732e+0007L,
553 - -7.988719647634192770463917157562874119535e+0008L,
554 - -1.318228171927181389547760026626357012375e+0010L,
555 - -1.282439773983029245309263271945424928196e+0011L,
556 - -7.050925570827818040186149940257918845138e+0011L,
557 - -2.021751882573871990004205616874202684429e+0012L,
558 - -2.592939962400668552384333900573812635658e+0012L,
559 - -1.038267109518891262840601514932972850326e+0012L,
597 + 1.0e0L,
598 + 7.246831508115058112438579847778014458432e+0002L,
599 + 2.100854184439168518399383786306927037611e+0005L,
600 + 3.192636418837951507430188285940994235122e+0007L,
601 + 2.801558443383354674538443461124434216152e+0009L,
602 + 1.475026997664373739293483927250653467487e+0011L,
603 + 4.694486824913954608552363821799927145318e+0012L,
604 + 8.890350100919200250838438709601547334021e+0013L,
605 + 9.626844429082905144874701068760469752067e+0014L,
606 + 5.541110744600460773528263862687521642140e+0015L,
607 + 1.486500494789452556727470329232123096563e+0016L,
608 + 1.415840104845959400365430773732093899210e+0016L,
609 + 1.780866095241517418081312567239682336483e+0015L,
610 + -2.359230917384889357887631544079990129494e+0014L,
611 +};
612 +
613 +static GENERIC qr2[12] = { /* [5, 8] */
614 + -1.249999999999999531937744362527772181614e-0001L,
615 + -4.944373897356969774839375977239241573966e+0001L,
616 + -7.728449175433465285314261650078450473909e+0003L,
617 + -6.262574329612752346336901434651220705903e+0005L,
618 + -2.900948220220943306027235217424380672732e+0007L,
619 + -7.988719647634192770463917157562874119535e+0008L,
620 + -1.318228171927181389547760026626357012375e+0010L,
621 + -1.282439773983029245309263271945424928196e+0011L,
622 + -7.050925570827818040186149940257918845138e+0011L,
623 + -2.021751882573871990004205616874202684429e+0012L,
624 + -2.592939962400668552384333900573812635658e+0012L,
625 + -1.038267109518891262840601514932972850326e+0012L,
560 626 };
627 +
561 628 static GENERIC qs2[14] = {
562 - 1.0e0L,
563 - 3.961358492885570003202784022894248952116e+0002L,
564 - 6.205788738864701882828752634586510926968e+0004L,
565 - 5.045715603932670286550673813011764406749e+0006L,
566 - 2.349248611362658323353343389430968751429e+0008L,
567 - 6.520244524415828635917683553721880063911e+0009L,
568 - 1.089111211223507719337067159886281887722e+0011L,
569 - 1.080406000905359867958779409414903018610e+0012L,
570 - 6.135645280895514703514154680623769562148e+0012L,
571 - 1.862433040246625874245867151368643668215e+0013L,
572 - 2.667780805786648888840777888702193708994e+0013L,
573 - 1.394401107289087774765300711809313112824e+0013L,
574 - 1.093247500616320375562898297156722445484e+0012L,
575 - -7.228875530378928722826604216491493780775e+0010L,
576 -};
577 -static GENERIC qr3[13] = { /* [3.5 5] */
578 - -1.249999999999473067748420379578481661075e-0001L,
579 - -3.044549048635289351913574324803250977998e+0001L,
580 - -2.890081140649769078496693003524681440869e+0003L,
581 - -1.404922456817202235879343275330529107684e+0005L,
582 - -3.862746614385573443518177403617349281869e+0006L,
583 - -6.257517309110249049201133708911155047689e+0007L,
584 - -6.031451330920839916987079782727323477520e+0008L,
585 - -3.411542405173830611454025765755854382346e+0009L,
586 - -1.089392478149726672133014498723021526099e+0010L,
587 - -1.824934078420210941290140903415956782726e+0010L,
588 - -1.400780278304358710423481070486939531139e+0010L,
589 - -3.716484136064917363926635716743771092093e+0009L,
590 - -1.397591075296425529970434890954904331580e+0008L,
629 + 1.0e0L,
630 + 3.961358492885570003202784022894248952116e+0002L,
631 + 6.205788738864701882828752634586510926968e+0004L,
632 + 5.045715603932670286550673813011764406749e+0006L,
633 + 2.349248611362658323353343389430968751429e+0008L,
634 + 6.520244524415828635917683553721880063911e+0009L,
635 + 1.089111211223507719337067159886281887722e+0011L,
636 + 1.080406000905359867958779409414903018610e+0012L,
637 + 6.135645280895514703514154680623769562148e+0012L,
638 + 1.862433040246625874245867151368643668215e+0013L,
639 + 2.667780805786648888840777888702193708994e+0013L,
640 + 1.394401107289087774765300711809313112824e+0013L,
641 + 1.093247500616320375562898297156722445484e+0012L,
642 + -7.228875530378928722826604216491493780775e+0010L,
643 +};
644 +
645 +static GENERIC qr3[13] = { /* [3.5 5] */
646 + -1.249999999999473067748420379578481661075e-0001L,
647 + -3.044549048635289351913574324803250977998e+0001L,
648 + -2.890081140649769078496693003524681440869e+0003L,
649 + -1.404922456817202235879343275330529107684e+0005L,
650 + -3.862746614385573443518177403617349281869e+0006L,
651 + -6.257517309110249049201133708911155047689e+0007L,
652 + -6.031451330920839916987079782727323477520e+0008L,
653 + -3.411542405173830611454025765755854382346e+0009L,
654 + -1.089392478149726672133014498723021526099e+0010L,
655 + -1.824934078420210941290140903415956782726e+0010L,
656 + -1.400780278304358710423481070486939531139e+0010L,
657 + -3.716484136064917363926635716743771092093e+0009L,
658 + -1.397591075296425529970434890954904331580e+0008L,
591 659 };
660 +
592 661 static GENERIC qs3[13] = {
593 - 1.0e0L,
594 - 2.441498613904962049391000187014945858042e+0002L,
595 - 2.326188882072370711500164222341514337043e+0004L,
596 - 1.137138213121231338494977104659239578165e+0006L,
597 - 3.152918070735662728722998452605364253517e+0007L,
598 - 5.172877993426507259314270488444013595108e+0008L,
599 - 5.083086439731669807455961078856470774115e+0009L,
600 - 2.961842732066434123119325521139476909941e+0010L,
601 - 9.912185866862440735829781856081353151390e+0010L,
602 - 1.793560561251622234430564181567297983598e+0011L,
603 - 1.577090119341228122525265108497940403073e+0011L,
604 - 5.509910306780166194333889999985463681636e+0010L,
605 - 4.761691134078874491202320181517936758141e+0009L,
606 -};
607 -static GENERIC qr4[13] = { /* [2.5 3.5] */
608 - -1.249999999928567734339745043490705340835e-0001L,
609 - -1.967201748731419063051601624435565528481e+0001L,
610 - -1.186329146714562236407099740615528170707e+0003L,
611 - -3.607736959222941810356301491152457934060e+0004L,
612 - -6.119200717978104904932828468575194267125e+0005L,
613 - -6.037847781158358226670305078652205586384e+0006L,
614 - -3.503558153336140359700536720393565984740e+0007L,
615 - -1.180196478268225718757218523746787309773e+0008L,
616 - -2.221860232085134915841426363505169680528e+0008L,
617 - -2.173372505452747585296176761701746236760e+0008L,
618 - -9.649364865061237558517730539506568013963e+0007L,
619 - -1.465429227847933034546039640094862650385e+0007L,
620 - -3.083003197920262085170581866246663380607e+0005L,
621 -};
622 -static GENERIC qs4[13] = { /* [2.5 3.5] */
623 - 1.0e0L,
624 - 1.579620773732259142752614142139986854055e+0002L,
625 - 9.581372220329138733203879503753685054968e+0003L,
626 - 2.939598672379108095776114131010825885308e+0005L,
627 - 5.052183049314542218630341818692588448168e+0006L,
628 - 5.083497695595206639433839326338971980149e+0007L,
629 - 3.036385361800553388049719014005099206516e+0008L,
630 - 1.067826481452753409910563785161661492137e+0009L,
631 - 2.145644125557118044720741775125319669272e+0009L,
632 - 2.324115615959719949363946673491552216799e+0009L,
633 - 1.223262962112070757966959855619847011146e+0009L,
634 - 2.569765553318495423738478585947110270709e+0008L,
635 - 1.354744744299227127897905787732636565504e+0007L,
636 -};
637 -static GENERIC qr5[13] = { /* [1.777.., 2.5] */
638 - -1.249999995936639697637680428174576069971e-0001L,
639 - -1.260846055371311453485891923426489068315e+0001L,
640 - -4.772398467544467480801174330290141578895e+0002L,
641 - -8.939852599990298486613760833996490599724e+0003L,
642 - -9.184070787149542050979542226446134243197e+0004L,
643 - -5.406038945018274458362637897739280435171e+0005L,
644 - -1.845896544705190261018653728678171084418e+0006L,
645 - -3.613616990680809501878667570653308071547e+0006L,
646 - -3.908782978135693252252557720414348623779e+0006L,
647 - -2.173711022517323927109138170588442768176e+0006L,
648 - -5.431253130679918485836408549007856244495e+0005L,
649 - -4.591098546452684510082591587275940765959e+0004L,
650 - -5.244711364168207806835520057792229646578e+0002L,
651 -};
652 -static GENERIC qs5[13] = { /* [1.777.., 2.5] */
653 - 1.0e0L,
654 - 1.014536210851290878350892750972474861447e+0002L,
655 - 3.875547510687135314064434160096139681076e+0003L,
656 - 7.361913122670079814955259281995617732580e+0004L,
657 - 7.720288944218771126581086539585529314636e+0005L,
658 - 4.681529554446752496404431433608306558038e+0006L,
659 - 1.667882621940503925455031252308367745820e+0007L,
660 - 3.469403153761399881888272620855305156241e+0007L,
661 - 4.096992047964210711867089384719947863019e+0007L,
662 - 2.596804755829217449311530735959560630554e+0007L,
663 - 7.983933774697889238154465064019410763845e+0006L,
664 - 9.818133816979900819087242425280757938152e+0005L,
665 - 3.061083930868694396013541535670745443560e+0004L,
666 -};
667 -
668 -static GENERIC qr6[13] = { /* [1.28, 1.777..] */
669 - -1.249999881577289001807137282824929082771e-0001L,
670 - -7.998273510053110759610810594119533619282e+0000L,
671 - -1.872481955335172543369089617771565632719e+0002L,
672 - -2.122116786726300805079874003303799646812e+0003L,
673 - -1.293850285839529282503178263484773478457e+0004L,
674 - -4.445024742266316181033354192262529356093e+0004L,
675 - -8.730161378334357767668344467356505347070e+0004L,
676 - -9.706222895172078442801444972505315054736e+0004L,
677 - -5.896325518259858270165531513618195321041e+0004L,
678 - -1.823172034368108822276420827074668832233e+0004L,
679 - -2.509304178635055926638833040337472387175e+0003L,
680 - -1.156608965715779237316769828941729964099e+0002L,
681 - -7.028005789650731396887346826397785210442e-0001L,
682 -};
683 -static GENERIC qs6[13] = { /* [1.28, 1.777..] */
684 - 1.0e0L,
685 - 6.457211085058064845601261321277721075900e+0001L,
686 - 1.534005216588011210342824555136008682950e+0003L,
687 - 1.777217999176441782593357660462379097171e+0004L,
688 - 1.118372652642469468091084810263231199696e+0005L,
689 - 4.015242433858461813142365748386473605294e+0005L,
690 - 8.377081045517098645448616514388280497673e+0005L,
691 - 1.011495020008010352575398009604164287337e+0006L,
692 - 6.886722075290430568652227875200208955970e+0005L,
693 - 2.504735189948021472047157148613171956537e+0005L,
694 - 4.408138920171044846941001844352009817062e+0004L,
695 - 3.105572178072115145673058722853640854884e+0003L,
696 - 5.588294821118916113437396504573817033678e+0001L,
662 + 1.0e0L,
663 + 2.441498613904962049391000187014945858042e+0002L,
664 + 2.326188882072370711500164222341514337043e+0004L,
665 + 1.137138213121231338494977104659239578165e+0006L,
666 + 3.152918070735662728722998452605364253517e+0007L,
667 + 5.172877993426507259314270488444013595108e+0008L,
668 + 5.083086439731669807455961078856470774115e+0009L,
669 + 2.961842732066434123119325521139476909941e+0010L,
670 + 9.912185866862440735829781856081353151390e+0010L,
671 + 1.793560561251622234430564181567297983598e+0011L,
672 + 1.577090119341228122525265108497940403073e+0011L,
673 + 5.509910306780166194333889999985463681636e+0010L,
674 + 4.761691134078874491202320181517936758141e+0009L,
675 +};
676 +
677 +static GENERIC qr4[13] = { /* [2.5 3.5] */
678 + -1.249999999928567734339745043490705340835e-0001L,
679 + -1.967201748731419063051601624435565528481e+0001L,
680 + -1.186329146714562236407099740615528170707e+0003L,
681 + -3.607736959222941810356301491152457934060e+0004L,
682 + -6.119200717978104904932828468575194267125e+0005L,
683 + -6.037847781158358226670305078652205586384e+0006L,
684 + -3.503558153336140359700536720393565984740e+0007L,
685 + -1.180196478268225718757218523746787309773e+0008L,
686 + -2.221860232085134915841426363505169680528e+0008L,
687 + -2.173372505452747585296176761701746236760e+0008L,
688 + -9.649364865061237558517730539506568013963e+0007L,
689 + -1.465429227847933034546039640094862650385e+0007L,
690 + -3.083003197920262085170581866246663380607e+0005L,
691 +};
692 +
693 +static GENERIC qs4[13] = { /* [2.5 3.5] */
694 + 1.0e0L,
695 + 1.579620773732259142752614142139986854055e+0002L,
696 + 9.581372220329138733203879503753685054968e+0003L,
697 + 2.939598672379108095776114131010825885308e+0005L,
698 + 5.052183049314542218630341818692588448168e+0006L,
699 + 5.083497695595206639433839326338971980149e+0007L,
700 + 3.036385361800553388049719014005099206516e+0008L,
701 + 1.067826481452753409910563785161661492137e+0009L,
702 + 2.145644125557118044720741775125319669272e+0009L,
703 + 2.324115615959719949363946673491552216799e+0009L,
704 + 1.223262962112070757966959855619847011146e+0009L,
705 + 2.569765553318495423738478585947110270709e+0008L,
706 + 1.354744744299227127897905787732636565504e+0007L,
707 +};
708 +
709 +static GENERIC qr5[13] = { /* [1.777.., 2.5] */
710 + -1.249999995936639697637680428174576069971e-0001L,
711 + -1.260846055371311453485891923426489068315e+0001L,
712 + -4.772398467544467480801174330290141578895e+0002L,
713 + -8.939852599990298486613760833996490599724e+0003L,
714 + -9.184070787149542050979542226446134243197e+0004L,
715 + -5.406038945018274458362637897739280435171e+0005L,
716 + -1.845896544705190261018653728678171084418e+0006L,
717 + -3.613616990680809501878667570653308071547e+0006L,
718 + -3.908782978135693252252557720414348623779e+0006L,
719 + -2.173711022517323927109138170588442768176e+0006L,
720 + -5.431253130679918485836408549007856244495e+0005L,
721 + -4.591098546452684510082591587275940765959e+0004L,
722 + -5.244711364168207806835520057792229646578e+0002L,
723 +};
724 +
725 +static GENERIC qs5[13] = { /* [1.777.., 2.5] */
726 + 1.0e0L,
727 + 1.014536210851290878350892750972474861447e+0002L,
728 + 3.875547510687135314064434160096139681076e+0003L,
729 + 7.361913122670079814955259281995617732580e+0004L,
730 + 7.720288944218771126581086539585529314636e+0005L,
731 + 4.681529554446752496404431433608306558038e+0006L,
732 + 1.667882621940503925455031252308367745820e+0007L,
733 + 3.469403153761399881888272620855305156241e+0007L,
734 + 4.096992047964210711867089384719947863019e+0007L,
735 + 2.596804755829217449311530735959560630554e+0007L,
736 + 7.983933774697889238154465064019410763845e+0006L,
737 + 9.818133816979900819087242425280757938152e+0005L,
738 + 3.061083930868694396013541535670745443560e+0004L,
739 +};
740 +
741 +static GENERIC qr6[13] = { /* [1.28, 1.777..] */
742 + -1.249999881577289001807137282824929082771e-0001L,
743 + -7.998273510053110759610810594119533619282e+0000L,
744 + -1.872481955335172543369089617771565632719e+0002L,
745 + -2.122116786726300805079874003303799646812e+0003L,
746 + -1.293850285839529282503178263484773478457e+0004L,
747 + -4.445024742266316181033354192262529356093e+0004L,
748 + -8.730161378334357767668344467356505347070e+0004L,
749 + -9.706222895172078442801444972505315054736e+0004L,
750 + -5.896325518259858270165531513618195321041e+0004L,
751 + -1.823172034368108822276420827074668832233e+0004L,
752 + -2.509304178635055926638833040337472387175e+0003L,
753 + -1.156608965715779237316769828941729964099e+0002L,
754 + -7.028005789650731396887346826397785210442e-0001L,
755 +};
756 +
757 +static GENERIC qs6[13] = { /* [1.28, 1.777..] */
758 + 1.0e0L,
759 + 6.457211085058064845601261321277721075900e+0001L,
760 + 1.534005216588011210342824555136008682950e+0003L,
761 + 1.777217999176441782593357660462379097171e+0004L,
762 + 1.118372652642469468091084810263231199696e+0005L,
763 + 4.015242433858461813142365748386473605294e+0005L,
764 + 8.377081045517098645448616514388280497673e+0005L,
765 + 1.011495020008010352575398009604164287337e+0006L,
766 + 6.886722075290430568652227875200208955970e+0005L,
767 + 2.504735189948021472047157148613171956537e+0005L,
768 + 4.408138920171044846941001844352009817062e+0004L,
769 + 3.105572178072115145673058722853640854884e+0003L,
770 + 5.588294821118916113437396504573817033678e+0001L,
697 771 };
698 -static GENERIC qzero(x)
699 -GENERIC x;
772 +
773 +static GENERIC
774 +qzero(x)
775 + GENERIC x;
700 776 {
701 777 GENERIC s, r, t, z;
702 778 int i;
779 +
703 780 if (x > huge)
704 - return (-0.125L/x);
705 - t = one/x; z = t*t;
781 + return (-0.125L / x);
782 +
783 + t = one / x;
784 + z = t * t;
785 +
706 786 if (x > sixteen) {
707 - r = z*qr0[11]+qr0[10]; s = qs0[10];
708 - for (i = 9; i >= 0; i--) {
709 - r = z*r + qr0[i];
710 - s = z*s + qs0[i];
711 - }
787 + r = z * qr0[11] + qr0[10];
788 + s = qs0[10];
789 +
790 + for (i = 9; i >= 0; i--) {
791 + r = z * r + qr0[i];
792 + s = z * s + qs0[i];
793 + }
712 794 } else if (x > eight) {
713 - r = qr1[11]; s = qs1[11]+z*(qs1[12]+z*qs1[13]);
714 - for (i = 10; i >= 0; i--) {
715 - r = z*r + qr1[i];
716 - s = z*s + qs1[i];
717 - }
718 - } else if (x > five) { /* assume x > 5.0 */
719 - r = qr2[11]; s = qs2[11]+z*(qs2[12]+z*qs2[13]);
720 - for (i = 10; i >= 0; i--) {
721 - r = z*r + qr2[i];
722 - s = z*s + qs2[i];
723 - }
795 + r = qr1[11];
796 + s = qs1[11] + z * (qs1[12] + z * qs1[13]);
797 +
798 + for (i = 10; i >= 0; i--) {
799 + r = z * r + qr1[i];
800 + s = z * s + qs1[i];
801 + }
802 + } else if (x > five) { /* assume x > 5.0 */
803 + r = qr2[11];
804 + s = qs2[11] + z * (qs2[12] + z * qs2[13]);
805 +
806 + for (i = 10; i >= 0; i--) {
807 + r = z * r + qr2[i];
808 + s = z * s + qs2[i];
809 + }
724 810 } else if (x > 3.5L) {
725 - r = qr3[12]; s = qs3[12];
726 - for (i = 11; i >= 0; i--) {
727 - r = z*r + qr3[i];
728 - s = z*s + qs3[i];
729 - }
811 + r = qr3[12];
812 + s = qs3[12];
813 +
814 + for (i = 11; i >= 0; i--) {
815 + r = z * r + qr3[i];
816 + s = z * s + qs3[i];
817 + }
730 818 } else if (x > 2.5L) {
731 - r = qr4[12]; s = qs4[12];
732 - for (i = 11; i >= 0; i--) {
733 - r = z*r + qr4[i];
734 - s = z*s + qs4[i];
735 - }
736 - } else if (x > (1.0L/0.5625L)) {
737 - r = qr5[12]; s = qs5[12];
738 - for (i = 11; i >= 0; i--) {
739 - r = z*r + qr5[i];
740 - s = z*s + qs5[i];
741 - }
742 - } else { /* assume x > 1.28 */
743 - r = qr6[12]; s = qs6[12];
744 - for (i = 11; i >= 0; i--) {
745 - r = z*r + qr6[i];
746 - s = z*s + qs6[i];
747 - }
819 + r = qr4[12];
820 + s = qs4[12];
821 +
822 + for (i = 11; i >= 0; i--) {
823 + r = z * r + qr4[i];
824 + s = z * s + qs4[i];
825 + }
826 + } else if (x > (1.0L / 0.5625L)) {
827 + r = qr5[12];
828 + s = qs5[12];
829 +
830 + for (i = 11; i >= 0; i--) {
831 + r = z * r + qr5[i];
832 + s = z * s + qs5[i];
833 + }
834 + } else { /* assume x > 1.28 */
835 + r = qr6[12];
836 + s = qs6[12];
837 +
838 + for (i = 11; i >= 0; i--) {
839 + r = z * r + qr6[i];
840 + s = z * s + qs6[i];
841 + }
748 842 }
749 - return (t*(r/s));
843 +
844 + return (t * (r / s));
750 845 }
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX