]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/ieee754/ldbl-128/e_j0l.c
Replace FSF snail mail address with URLs.
[thirdparty/glibc.git] / sysdeps / ieee754 / ldbl-128 / e_j0l.c
CommitLineData
f524e4a2
AJ
1/* j0l.c
2 *
3 * Bessel function of order zero
4 *
5 *
6 *
7 * SYNOPSIS:
8 *
9 * long double x, y, j0l();
10 *
11 * y = j0l( x );
12 *
13 *
14 *
15 * DESCRIPTION:
16 *
17 * Returns Bessel function of first kind, order zero of the argument.
18 *
19 * The domain is divided into two major intervals [0, 2] and
20 * (2, infinity). In the first interval the rational approximation
21 * is J0(x) = 1 - x^2 / 4 + x^4 R(x^2)
22 * The second interval is further partitioned into eight equal segments
23 * of 1/x.
24 *
25 * J0(x) = sqrt(2/(pi x)) (P0(x) cos(X) - Q0(x) sin(X)),
26 * X = x - pi/4,
27 *
28 * and the auxiliary functions are given by
29 *
30 * J0(x)cos(X) + Y0(x)sin(X) = sqrt( 2/(pi x)) P0(x),
31 * P0(x) = 1 + 1/x^2 R(1/x^2)
32 *
33 * Y0(x)cos(X) - J0(x)sin(X) = sqrt( 2/(pi x)) Q0(x),
34 * Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
35 *
36 *
37 *
38 * ACCURACY:
39 *
40 * Absolute error:
41 * arithmetic domain # trials peak rms
42 * IEEE 0, 30 100000 1.7e-34 2.4e-35
43 *
44 *
45 */
46
47/* y0l.c
48 *
49 * Bessel function of the second kind, order zero
50 *
51 *
52 *
53 * SYNOPSIS:
54 *
55 * double x, y, y0l();
56 *
57 * y = y0l( x );
58 *
59 *
60 *
61 * DESCRIPTION:
62 *
63 * Returns Bessel function of the second kind, of order
64 * zero, of the argument.
65 *
66 * The approximation is the same as for J0(x), and
67 * Y0(x) = sqrt(2/(pi x)) (P0(x) sin(X) + Q0(x) cos(X)).
68 *
69 * ACCURACY:
70 *
71 * Absolute error, when y0(x) < 1; else relative error:
72 *
73 * arithmetic domain # trials peak rms
74 * IEEE 0, 30 100000 3.0e-34 2.7e-35
75 *
76 */
77
cc7375ce
RM
78/* Copyright 2001 by Stephen L. Moshier (moshier@na-net.ornl.gov).
79
80 This library is free software; you can redistribute it and/or
81 modify it under the terms of the GNU Lesser General Public
82 License as published by the Free Software Foundation; either
83 version 2.1 of the License, or (at your option) any later version.
84
85 This library is distributed in the hope that it will be useful,
86 but WITHOUT ANY WARRANTY; without even the implied warranty of
87 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
88 Lesser General Public License for more details.
89
90 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
91 License along with this library; if not, see
92 <http://www.gnu.org/licenses/>. */
f524e4a2
AJ
93
94#include "math.h"
95#include "math_private.h"
96
97/* 1 / sqrt(pi) */
1f5649f8 98static const long double ONEOSQPI = 5.6418958354775628694807945156077258584405E-1L;
f524e4a2 99/* 2 / pi */
1f5649f8
UD
100static const long double TWOOPI = 6.3661977236758134307553505349005744813784E-1L;
101static const long double zero = 0.0L;
f524e4a2
AJ
102
103/* J0(x) = 1 - x^2/4 + x^2 x^2 R(x^2)
104 Peak relative error 3.4e-37
105 0 <= x <= 2 */
106#define NJ0_2N 6
1f5649f8 107static const long double J0_2N[NJ0_2N + 1] = {
f524e4a2
AJ
108 3.133239376997663645548490085151484674892E16L,
109 -5.479944965767990821079467311839107722107E14L,
110 6.290828903904724265980249871997551894090E12L,
111 -3.633750176832769659849028554429106299915E10L,
112 1.207743757532429576399485415069244807022E8L,
113 -2.107485999925074577174305650549367415465E5L,
114 1.562826808020631846245296572935547005859E2L,
115};
116#define NJ0_2D 6
1f5649f8 117static const long double J0_2D[NJ0_2D + 1] = {
f524e4a2
AJ
118 2.005273201278504733151033654496928968261E18L,
119 2.063038558793221244373123294054149790864E16L,
120 1.053350447931127971406896594022010524994E14L,
121 3.496556557558702583143527876385508882310E11L,
122 8.249114511878616075860654484367133976306E8L,
123 1.402965782449571800199759247964242790589E6L,
124 1.619910762853439600957801751815074787351E3L,
125 /* 1.000000000000000000000000000000000000000E0 */
126};
127
128/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2),
129 0 <= 1/x <= .0625
130 Peak relative error 3.3e-36 */
131#define NP16_IN 9
1f5649f8 132static const long double P16_IN[NP16_IN + 1] = {
f524e4a2
AJ
133 -1.901689868258117463979611259731176301065E-16L,
134 -1.798743043824071514483008340803573980931E-13L,
135 -6.481746687115262291873324132944647438959E-11L,
136 -1.150651553745409037257197798528294248012E-8L,
137 -1.088408467297401082271185599507222695995E-6L,
138 -5.551996725183495852661022587879817546508E-5L,
139 -1.477286941214245433866838787454880214736E-3L,
140 -1.882877976157714592017345347609200402472E-2L,
141 -9.620983176855405325086530374317855880515E-2L,
142 -1.271468546258855781530458854476627766233E-1L,
143};
144#define NP16_ID 9
1f5649f8 145static const long double P16_ID[NP16_ID + 1] = {
f524e4a2
AJ
146 2.704625590411544837659891569420764475007E-15L,
147 2.562526347676857624104306349421985403573E-12L,
148 9.259137589952741054108665570122085036246E-10L,
149 1.651044705794378365237454962653430805272E-7L,
150 1.573561544138733044977714063100859136660E-5L,
151 8.134482112334882274688298469629884804056E-4L,
152 2.219259239404080863919375103673593571689E-2L,
153 2.976990606226596289580242451096393862792E-1L,
154 1.713895630454693931742734911930937246254E0L,
155 3.231552290717904041465898249160757368855E0L,
156 /* 1.000000000000000000000000000000000000000E0 */
157};
158
159/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2)
160 0.0625 <= 1/x <= 0.125
161 Peak relative error 2.4e-35 */
162#define NP8_16N 10
1f5649f8 163static const long double P8_16N[NP8_16N + 1] = {
f524e4a2
AJ
164 -2.335166846111159458466553806683579003632E-15L,
165 -1.382763674252402720401020004169367089975E-12L,
166 -3.192160804534716696058987967592784857907E-10L,
167 -3.744199606283752333686144670572632116899E-8L,
168 -2.439161236879511162078619292571922772224E-6L,
169 -9.068436986859420951664151060267045346549E-5L,
170 -1.905407090637058116299757292660002697359E-3L,
171 -2.164456143936718388053842376884252978872E-2L,
172 -1.212178415116411222341491717748696499966E-1L,
173 -2.782433626588541494473277445959593334494E-1L,
174 -1.670703190068873186016102289227646035035E-1L,
175};
176#define NP8_16D 10
1f5649f8 177static const long double P8_16D[NP8_16D + 1] = {
f524e4a2
AJ
178 3.321126181135871232648331450082662856743E-14L,
179 1.971894594837650840586859228510007703641E-11L,
180 4.571144364787008285981633719513897281690E-9L,
181 5.396419143536287457142904742849052402103E-7L,
182 3.551548222385845912370226756036899901549E-5L,
183 1.342353874566932014705609788054598013516E-3L,
184 2.899133293006771317589357444614157734385E-2L,
185 3.455374978185770197704507681491574261545E-1L,
186 2.116616964297512311314454834712634820514E0L,
187 5.850768316827915470087758636881584174432E0L,
188 5.655273858938766830855753983631132928968E0L,
189 /* 1.000000000000000000000000000000000000000E0 */
190};
191
192/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2)
193 0.125 <= 1/x <= 0.1875
194 Peak relative error 2.7e-35 */
195#define NP5_8N 10
1f5649f8 196static const long double P5_8N[NP5_8N + 1] = {
f524e4a2
AJ
197 -1.270478335089770355749591358934012019596E-12L,
198 -4.007588712145412921057254992155810347245E-10L,
199 -4.815187822989597568124520080486652009281E-8L,
200 -2.867070063972764880024598300408284868021E-6L,
201 -9.218742195161302204046454768106063638006E-5L,
202 -1.635746821447052827526320629828043529997E-3L,
203 -1.570376886640308408247709616497261011707E-2L,
204 -7.656484795303305596941813361786219477807E-2L,
205 -1.659371030767513274944805479908858628053E-1L,
206 -1.185340550030955660015841796219919804915E-1L,
207 -8.920026499909994671248893388013790366712E-3L,
208};
209#define NP5_8D 9
1f5649f8 210static const long double P5_8D[NP5_8D + 1] = {
f524e4a2
AJ
211 1.806902521016705225778045904631543990314E-11L,
212 5.728502760243502431663549179135868966031E-9L,
213 6.938168504826004255287618819550667978450E-7L,
214 4.183769964807453250763325026573037785902E-5L,
215 1.372660678476925468014882230851637878587E-3L,
216 2.516452105242920335873286419212708961771E-2L,
217 2.550502712902647803796267951846557316182E-1L,
218 1.365861559418983216913629123778747617072E0L,
219 3.523825618308783966723472468855042541407E0L,
220 3.656365803506136165615111349150536282434E0L,
221 /* 1.000000000000000000000000000000000000000E0 */
222};
223
224/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2)
225 Peak relative error 3.5e-35
226 0.1875 <= 1/x <= 0.25 */
227#define NP4_5N 9
1f5649f8 228static const long double P4_5N[NP4_5N + 1] = {
f524e4a2
AJ
229 -9.791405771694098960254468859195175708252E-10L,
230 -1.917193059944531970421626610188102836352E-7L,
231 -1.393597539508855262243816152893982002084E-5L,
232 -4.881863490846771259880606911667479860077E-4L,
233 -8.946571245022470127331892085881699269853E-3L,
234 -8.707474232568097513415336886103899434251E-2L,
235 -4.362042697474650737898551272505525973766E-1L,
236 -1.032712171267523975431451359962375617386E0L,
237 -9.630502683169895107062182070514713702346E-1L,
238 -2.251804386252969656586810309252357233320E-1L,
239};
240#define NP4_5D 9
1f5649f8 241static const long double P4_5D[NP4_5D + 1] = {
f524e4a2
AJ
242 1.392555487577717669739688337895791213139E-8L,
243 2.748886559120659027172816051276451376854E-6L,
244 2.024717710644378047477189849678576659290E-4L,
245 7.244868609350416002930624752604670292469E-3L,
246 1.373631762292244371102989739300382152416E-1L,
247 1.412298581400224267910294815260613240668E0L,
248 7.742495637843445079276397723849017617210E0L,
249 2.138429269198406512028307045259503811861E1L,
250 2.651547684548423476506826951831712762610E1L,
251 1.167499382465291931571685222882909166935E1L,
252 /* 1.000000000000000000000000000000000000000E0 */
253};
254
255/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2)
256 Peak relative error 2.3e-36
257 0.25 <= 1/x <= 0.3125 */
258#define NP3r2_4N 9
1f5649f8 259static const long double P3r2_4N[NP3r2_4N + 1] = {
f524e4a2
AJ
260 -2.589155123706348361249809342508270121788E-8L,
261 -3.746254369796115441118148490849195516593E-6L,
262 -1.985595497390808544622893738135529701062E-4L,
263 -5.008253705202932091290132760394976551426E-3L,
264 -6.529469780539591572179155511840853077232E-2L,
265 -4.468736064761814602927408833818990271514E-1L,
266 -1.556391252586395038089729428444444823380E0L,
267 -2.533135309840530224072920725976994981638E0L,
268 -1.605509621731068453869408718565392869560E0L,
269 -2.518966692256192789269859830255724429375E-1L,
270};
271#define NP3r2_4D 9
1f5649f8 272static const long double P3r2_4D[NP3r2_4D + 1] = {
f524e4a2
AJ
273 3.682353957237979993646169732962573930237E-7L,
274 5.386741661883067824698973455566332102029E-5L,
275 2.906881154171822780345134853794241037053E-3L,
276 7.545832595801289519475806339863492074126E-2L,
277 1.029405357245594877344360389469584526654E0L,
278 7.565706120589873131187989560509757626725E0L,
279 2.951172890699569545357692207898667665796E1L,
280 5.785723537170311456298467310529815457536E1L,
281 5.095621464598267889126015412522773474467E1L,
282 1.602958484169953109437547474953308401442E1L,
283 /* 1.000000000000000000000000000000000000000E0 */
284};
285
286/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2)
287 Peak relative error 1.0e-35
288 0.3125 <= 1/x <= 0.375 */
289#define NP2r7_3r2N 9
1f5649f8 290static const long double P2r7_3r2N[NP2r7_3r2N + 1] = {
f524e4a2
AJ
291 -1.917322340814391131073820537027234322550E-7L,
292 -1.966595744473227183846019639723259011906E-5L,
293 -7.177081163619679403212623526632690465290E-4L,
294 -1.206467373860974695661544653741899755695E-2L,
295 -1.008656452188539812154551482286328107316E-1L,
296 -4.216016116408810856620947307438823892707E-1L,
297 -8.378631013025721741744285026537009814161E-1L,
298 -6.973895635309960850033762745957946272579E-1L,
299 -1.797864718878320770670740413285763554812E-1L,
300 -4.098025357743657347681137871388402849581E-3L,
301};
302#define NP2r7_3r2D 8
1f5649f8 303static const long double P2r7_3r2D[NP2r7_3r2D + 1] = {
f524e4a2
AJ
304 2.726858489303036441686496086962545034018E-6L,
305 2.840430827557109238386808968234848081424E-4L,
306 1.063826772041781947891481054529454088832E-2L,
307 1.864775537138364773178044431045514405468E-1L,
308 1.665660052857205170440952607701728254211E0L,
309 7.723745889544331153080842168958348568395E0L,
310 1.810726427571829798856428548102077799835E1L,
311 1.986460672157794440666187503833545388527E1L,
312 8.645503204552282306364296517220055815488E0L,
313 /* 1.000000000000000000000000000000000000000E0 */
314};
315
316/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2)
317 Peak relative error 1.3e-36
318 0.3125 <= 1/x <= 0.4375 */
319#define NP2r3_2r7N 9
1f5649f8 320static const long double P2r3_2r7N[NP2r3_2r7N + 1] = {
f524e4a2
AJ
321 -1.594642785584856746358609622003310312622E-6L,
322 -1.323238196302221554194031733595194539794E-4L,
323 -3.856087818696874802689922536987100372345E-3L,
324 -5.113241710697777193011470733601522047399E-2L,
325 -3.334229537209911914449990372942022350558E-1L,
326 -1.075703518198127096179198549659283422832E0L,
327 -1.634174803414062725476343124267110981807E0L,
328 -1.030133247434119595616826842367268304880E0L,
329 -1.989811539080358501229347481000707289391E-1L,
330 -3.246859189246653459359775001466924610236E-3L,
331};
332#define NP2r3_2r7D 8
1f5649f8 333static const long double P2r3_2r7D[NP2r3_2r7D + 1] = {
f524e4a2
AJ
334 2.267936634217251403663034189684284173018E-5L,
335 1.918112982168673386858072491437971732237E-3L,
336 5.771704085468423159125856786653868219522E-2L,
337 8.056124451167969333717642810661498890507E-1L,
338 5.687897967531010276788680634413789328776E0L,
339 2.072596760717695491085444438270778394421E1L,
340 3.801722099819929988585197088613160496684E1L,
341 3.254620235902912339534998592085115836829E1L,
342 1.104847772130720331801884344645060675036E1L,
343 /* 1.000000000000000000000000000000000000000E0 */
344};
345
346/* J0(x)cosX + Y0(x)sinX = sqrt( 2/(pi x)) P0(x), P0(x) = 1 + 1/x^2 R(1/x^2)
347 Peak relative error 1.2e-35
348 0.4375 <= 1/x <= 0.5 */
349#define NP2_2r3N 8
1f5649f8 350static const long double P2_2r3N[NP2_2r3N + 1] = {
f524e4a2
AJ
351 -1.001042324337684297465071506097365389123E-4L,
352 -6.289034524673365824853547252689991418981E-3L,
353 -1.346527918018624234373664526930736205806E-1L,
354 -1.268808313614288355444506172560463315102E0L,
355 -5.654126123607146048354132115649177406163E0L,
356 -1.186649511267312652171775803270911971693E1L,
357 -1.094032424931998612551588246779200724257E1L,
358 -3.728792136814520055025256353193674625267E0L,
359 -3.000348318524471807839934764596331810608E-1L,
360};
361#define NP2_2r3D 8
1f5649f8 362static const long double P2_2r3D[NP2_2r3D + 1] = {
f524e4a2
AJ
363 1.423705538269770974803901422532055612980E-3L,
364 9.171476630091439978533535167485230575894E-2L,
365 2.049776318166637248868444600215942828537E0L,
366 2.068970329743769804547326701946144899583E1L,
367 1.025103500560831035592731539565060347709E2L,
368 2.528088049697570728252145557167066708284E2L,
369 2.992160327587558573740271294804830114205E2L,
370 1.540193761146551025832707739468679973036E2L,
371 2.779516701986912132637672140709452502650E1L,
372 /* 1.000000000000000000000000000000000000000E0 */
373};
374
375/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
376 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
377 Peak relative error 2.2e-35
378 0 <= 1/x <= .0625 */
379#define NQ16_IN 10
1f5649f8 380static const long double Q16_IN[NQ16_IN + 1] = {
f524e4a2
AJ
381 2.343640834407975740545326632205999437469E-18L,
382 2.667978112927811452221176781536278257448E-15L,
383 1.178415018484555397390098879501969116536E-12L,
384 2.622049767502719728905924701288614016597E-10L,
385 3.196908059607618864801313380896308968673E-8L,
386 2.179466154171673958770030655199434798494E-6L,
387 8.139959091628545225221976413795645177291E-5L,
388 1.563900725721039825236927137885747138654E-3L,
389 1.355172364265825167113562519307194840307E-2L,
390 3.928058355906967977269780046844768588532E-2L,
391 1.107891967702173292405380993183694932208E-2L,
392};
393#define NQ16_ID 9
1f5649f8 394static const long double Q16_ID[NQ16_ID + 1] = {
f524e4a2
AJ
395 3.199850952578356211091219295199301766718E-17L,
396 3.652601488020654842194486058637953363918E-14L,
397 1.620179741394865258354608590461839031281E-11L,
398 3.629359209474609630056463248923684371426E-9L,
399 4.473680923894354600193264347733477363305E-7L,
400 3.106368086644715743265603656011050476736E-5L,
401 1.198239259946770604954664925153424252622E-3L,
402 2.446041004004283102372887804475767568272E-2L,
403 2.403235525011860603014707768815113698768E-1L,
404 9.491006790682158612266270665136910927149E-1L,
405 /* 1.000000000000000000000000000000000000000E0 */
406 };
407
408/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
409 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
410 Peak relative error 5.1e-36
411 0.0625 <= 1/x <= 0.125 */
412#define NQ8_16N 11
1f5649f8 413static const long double Q8_16N[NQ8_16N + 1] = {
f524e4a2
AJ
414 1.001954266485599464105669390693597125904E-17L,
415 7.545499865295034556206475956620160007849E-15L,
416 2.267838684785673931024792538193202559922E-12L,
417 3.561909705814420373609574999542459912419E-10L,
418 3.216201422768092505214730633842924944671E-8L,
419 1.731194793857907454569364622452058554314E-6L,
420 5.576944613034537050396518509871004586039E-5L,
421 1.051787760316848982655967052985391418146E-3L,
422 1.102852974036687441600678598019883746959E-2L,
423 5.834647019292460494254225988766702933571E-2L,
424 1.290281921604364618912425380717127576529E-1L,
425 7.598886310387075708640370806458926458301E-2L,
426};
427#define NQ8_16D 11
1f5649f8 428static const long double Q8_16D[NQ8_16D + 1] = {
f524e4a2
AJ
429 1.368001558508338469503329967729951830843E-16L,
430 1.034454121857542147020549303317348297289E-13L,
431 3.128109209247090744354764050629381674436E-11L,
432 4.957795214328501986562102573522064468671E-9L,
433 4.537872468606711261992676606899273588899E-7L,
434 2.493639207101727713192687060517509774182E-5L,
435 8.294957278145328349785532236663051405805E-4L,
436 1.646471258966713577374948205279380115839E-2L,
437 1.878910092770966718491814497982191447073E-1L,
438 1.152641605706170353727903052525652504075E0L,
439 3.383550240669773485412333679367792932235E0L,
440 3.823875252882035706910024716609908473970E0L,
441 /* 1.000000000000000000000000000000000000000E0 */
442};
443
444/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
445 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
446 Peak relative error 3.9e-35
447 0.125 <= 1/x <= 0.1875 */
448#define NQ5_8N 10
1f5649f8 449static const long double Q5_8N[NQ5_8N + 1] = {
f524e4a2
AJ
450 1.750399094021293722243426623211733898747E-13L,
451 6.483426211748008735242909236490115050294E-11L,
452 9.279430665656575457141747875716899958373E-9L,
453 6.696634968526907231258534757736576340266E-7L,
454 2.666560823798895649685231292142838188061E-5L,
455 6.025087697259436271271562769707550594540E-4L,
456 7.652807734168613251901945778921336353485E-3L,
457 5.226269002589406461622551452343519078905E-2L,
458 1.748390159751117658969324896330142895079E-1L,
459 2.378188719097006494782174902213083589660E-1L,
460 8.383984859679804095463699702165659216831E-2L,
461};
462#define NQ5_8D 10
1f5649f8 463static const long double Q5_8D[NQ5_8D + 1] = {
f524e4a2
AJ
464 2.389878229704327939008104855942987615715E-12L,
465 8.926142817142546018703814194987786425099E-10L,
466 1.294065862406745901206588525833274399038E-7L,
467 9.524139899457666250828752185212769682191E-6L,
468 3.908332488377770886091936221573123353489E-4L,
469 9.250427033957236609624199884089916836748E-3L,
470 1.263420066165922645975830877751588421451E-1L,
471 9.692527053860420229711317379861733180654E-1L,
472 3.937813834630430172221329298841520707954E0L,
473 7.603126427436356534498908111445191312181E0L,
474 5.670677653334105479259958485084550934305E0L,
475 /* 1.000000000000000000000000000000000000000E0 */
476};
477
478/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
479 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
480 Peak relative error 3.2e-35
481 0.1875 <= 1/x <= 0.25 */
482#define NQ4_5N 10
1f5649f8 483static const long double Q4_5N[NQ4_5N + 1] = {
f524e4a2
AJ
484 2.233870042925895644234072357400122854086E-11L,
485 5.146223225761993222808463878999151699792E-9L,
486 4.459114531468296461688753521109797474523E-7L,
487 1.891397692931537975547242165291668056276E-5L,
488 4.279519145911541776938964806470674565504E-4L,
489 5.275239415656560634702073291768904783989E-3L,
490 3.468698403240744801278238473898432608887E-2L,
491 1.138773146337708415188856882915457888274E-1L,
492 1.622717518946443013587108598334636458955E-1L,
493 7.249040006390586123760992346453034628227E-2L,
494 1.941595365256460232175236758506411486667E-3L,
495};
496#define NQ4_5D 9
1f5649f8 497static const long double Q4_5D[NQ4_5D + 1] = {
f524e4a2
AJ
498 3.049977232266999249626430127217988047453E-10L,
499 7.120883230531035857746096928889676144099E-8L,
500 6.301786064753734446784637919554359588859E-6L,
501 2.762010530095069598480766869426308077192E-4L,
502 6.572163250572867859316828886203406361251E-3L,
503 8.752566114841221958200215255461843397776E-2L,
504 6.487654992874805093499285311075289932664E-1L,
505 2.576550017826654579451615283022812801435E0L,
506 5.056392229924022835364779562707348096036E0L,
507 4.179770081068251464907531367859072157773E0L,
508 /* 1.000000000000000000000000000000000000000E0 */
509};
510
511/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
512 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
513 Peak relative error 1.4e-36
514 0.25 <= 1/x <= 0.3125 */
515#define NQ3r2_4N 10
1f5649f8 516static const long double Q3r2_4N[NQ3r2_4N + 1] = {
f524e4a2
AJ
517 6.126167301024815034423262653066023684411E-10L,
518 1.043969327113173261820028225053598975128E-7L,
519 6.592927270288697027757438170153763220190E-6L,
520 2.009103660938497963095652951912071336730E-4L,
521 3.220543385492643525985862356352195896964E-3L,
522 2.774405975730545157543417650436941650990E-2L,
523 1.258114008023826384487378016636555041129E-1L,
524 2.811724258266902502344701449984698323860E-1L,
525 2.691837665193548059322831687432415014067E-1L,
526 7.949087384900985370683770525312735605034E-2L,
527 1.229509543620976530030153018986910810747E-3L,
528};
529#define NQ3r2_4D 9
1f5649f8 530static const long double Q3r2_4D[NQ3r2_4D + 1] = {
f524e4a2
AJ
531 8.364260446128475461539941389210166156568E-9L,
532 1.451301850638956578622154585560759862764E-6L,
533 9.431830010924603664244578867057141839463E-5L,
534 3.004105101667433434196388593004526182741E-3L,
535 5.148157397848271739710011717102773780221E-2L,
536 4.901089301726939576055285374953887874895E-1L,
537 2.581760991981709901216967665934142240346E0L,
538 7.257105880775059281391729708630912791847E0L,
539 1.006014717326362868007913423810737369312E1L,
540 5.879416600465399514404064187445293212470E0L,
541 /* 1.000000000000000000000000000000000000000E0*/
542};
543
544/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
545 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
546 Peak relative error 3.8e-36
547 0.3125 <= 1/x <= 0.375 */
548#define NQ2r7_3r2N 9
1f5649f8 549static const long double Q2r7_3r2N[NQ2r7_3r2N + 1] = {
f524e4a2
AJ
550 7.584861620402450302063691901886141875454E-8L,
551 9.300939338814216296064659459966041794591E-6L,
552 4.112108906197521696032158235392604947895E-4L,
553 8.515168851578898791897038357239630654431E-3L,
554 8.971286321017307400142720556749573229058E-2L,
555 4.885856732902956303343015636331874194498E-1L,
556 1.334506268733103291656253500506406045846E0L,
557 1.681207956863028164179042145803851824654E0L,
558 8.165042692571721959157677701625853772271E-1L,
559 9.805848115375053300608712721986235900715E-2L,
560};
561#define NQ2r7_3r2D 9
1f5649f8 562static const long double Q2r7_3r2D[NQ2r7_3r2D + 1] = {
f524e4a2
AJ
563 1.035586492113036586458163971239438078160E-6L,
564 1.301999337731768381683593636500979713689E-4L,
565 5.993695702564527062553071126719088859654E-3L,
566 1.321184892887881883489141186815457808785E-1L,
567 1.528766555485015021144963194165165083312E0L,
568 9.561463309176490874525827051566494939295E0L,
569 3.203719484883967351729513662089163356911E1L,
570 5.497294687660930446641539152123568668447E1L,
571 4.391158169390578768508675452986948391118E1L,
572 1.347836630730048077907818943625789418378E1L,
573 /* 1.000000000000000000000000000000000000000E0 */
574};
575
576/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
577 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
578 Peak relative error 2.2e-35
579 0.375 <= 1/x <= 0.4375 */
580#define NQ2r3_2r7N 9
1f5649f8 581static const long double Q2r3_2r7N[NQ2r3_2r7N + 1] = {
f524e4a2
AJ
582 4.455027774980750211349941766420190722088E-7L,
583 4.031998274578520170631601850866780366466E-5L,
584 1.273987274325947007856695677491340636339E-3L,
585 1.818754543377448509897226554179659122873E-2L,
586 1.266748858326568264126353051352269875352E-1L,
587 4.327578594728723821137731555139472880414E-1L,
588 6.892532471436503074928194969154192615359E-1L,
589 4.490775818438716873422163588640262036506E-1L,
590 8.649615949297322440032000346117031581572E-2L,
591 7.261345286655345047417257611469066147561E-4L,
592};
593#define NQ2r3_2r7D 8
1f5649f8 594static const long double Q2r3_2r7D[NQ2r3_2r7D + 1] = {
f524e4a2
AJ
595 6.082600739680555266312417978064954793142E-6L,
596 5.693622538165494742945717226571441747567E-4L,
597 1.901625907009092204458328768129666975975E-2L,
598 2.958689532697857335456896889409923371570E-1L,
599 2.343124711045660081603809437993368799568E0L,
600 9.665894032187458293568704885528192804376E0L,
601 2.035273104990617136065743426322454881353E1L,
602 2.044102010478792896815088858740075165531E1L,
603 8.445937177863155827844146643468706599304E0L,
604 /* 1.000000000000000000000000000000000000000E0 */
605};
606
607/* Y0(x)cosX - J0(x)sinX = sqrt( 2/(pi x)) Q0(x),
608 Q0(x) = 1/x (-.125 + 1/x^2 R(1/x^2))
609 Peak relative error 3.1e-36
610 0.4375 <= 1/x <= 0.5 */
611#define NQ2_2r3N 9
1f5649f8 612static const long double Q2_2r3N[NQ2_2r3N + 1] = {
f524e4a2
AJ
613 2.817566786579768804844367382809101929314E-6L,
614 2.122772176396691634147024348373539744935E-4L,
615 5.501378031780457828919593905395747517585E-3L,
616 6.355374424341762686099147452020466524659E-2L,
617 3.539652320122661637429658698954748337223E-1L,
618 9.571721066119617436343740541777014319695E-1L,
619 1.196258777828426399432550698612171955305E0L,
620 6.069388659458926158392384709893753793967E-1L,
621 9.026746127269713176512359976978248763621E-2L,
622 5.317668723070450235320878117210807236375E-4L,
623};
624#define NQ2_2r3D 8
1f5649f8 625static const long double Q2_2r3D[NQ2_2r3D + 1] = {
f524e4a2
AJ
626 3.846924354014260866793741072933159380158E-5L,
627 3.017562820057704325510067178327449946763E-3L,
628 8.356305620686867949798885808540444210935E-2L,
629 1.068314930499906838814019619594424586273E0L,
630 6.900279623894821067017966573640732685233E0L,
631 2.307667390886377924509090271780839563141E1L,
632 3.921043465412723970791036825401273528513E1L,
633 3.167569478939719383241775717095729233436E1L,
634 1.051023841699200920276198346301543665909E1L,
635 /* 1.000000000000000000000000000000000000000E0*/
636};
637
638
639/* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */
640
641static long double
60a06b7c 642neval (long double x, const long double *p, int n)
f524e4a2
AJ
643{
644 long double y;
645
646 p += n;
647 y = *p--;
648 do
649 {
650 y = y * x + *p--;
651 }
652 while (--n > 0);
653 return y;
654}
655
656
657/* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */
658
659static long double
60a06b7c 660deval (long double x, const long double *p, int n)
f524e4a2
AJ
661{
662 long double y;
663
664 p += n;
665 y = x + *p--;
666 do
667 {
668 y = y * x + *p--;
669 }
670 while (--n > 0);
671 return y;
672}
673
674
675/* Bessel function of the first kind, order zero. */
676
677long double
678__ieee754_j0l (long double x)
679{
680 long double xx, xinv, z, p, q, c, s, cc, ss;
681
c5ee217f 682 if (! __finitel (x))
f524e4a2
AJ
683 {
684 if (x != x)
685 return x;
686 else
687 return 0.0L;
688 }
689 if (x == 0.0L)
690 return 1.0L;
691
692 xx = fabsl (x);
693 if (xx <= 2.0L)
694 {
695 /* 0 <= x <= 2 */
696 z = xx * xx;
697 p = z * z * neval (z, J0_2N, NJ0_2N) / deval (z, J0_2D, NJ0_2D);
698 p -= 0.25L * z;
699 p += 1.0L;
700 return p;
701 }
702
703 xinv = 1.0L / xx;
704 z = xinv * xinv;
705 if (xinv <= 0.25)
706 {
707 if (xinv <= 0.125)
708 {
709 if (xinv <= 0.0625)
710 {
711 p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID);
712 q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID);
713 }
714 else
715 {
716 p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D);
717 q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D);
718 }
719 }
720 else if (xinv <= 0.1875)
721 {
722 p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D);
723 q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D);
724 }
725 else
726 {
727 p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D);
728 q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D);
729 }
730 } /* .25 */
731 else /* if (xinv <= 0.5) */
732 {
733 if (xinv <= 0.375)
734 {
735 if (xinv <= 0.3125)
736 {
737 p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D);
738 q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D);
739 }
740 else
741 {
742 p = neval (z, P2r7_3r2N, NP2r7_3r2N)
743 / deval (z, P2r7_3r2D, NP2r7_3r2D);
744 q = neval (z, Q2r7_3r2N, NQ2r7_3r2N)
745 / deval (z, Q2r7_3r2D, NQ2r7_3r2D);
746 }
747 }
748 else if (xinv <= 0.4375)
749 {
750 p = neval (z, P2r3_2r7N, NP2r3_2r7N)
751 / deval (z, P2r3_2r7D, NP2r3_2r7D);
752 q = neval (z, Q2r3_2r7N, NQ2r3_2r7N)
753 / deval (z, Q2r3_2r7D, NQ2r3_2r7D);
754 }
755 else
756 {
757 p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D);
758 q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D);
759 }
760 }
761 p = 1.0L + z * p;
762 q = z * xinv * q;
763 q = q - 0.125L * xinv;
764 /* X = x - pi/4
765 cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4)
766 = 1/sqrt(2) * (cos(x) + sin(x))
767 sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4)
768 = 1/sqrt(2) * (sin(x) - cos(x))
769 sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
770 cf. Fdlibm. */
246ec411 771 __sincosl (xx, &s, &c);
f524e4a2
AJ
772 ss = s - c;
773 cc = s + c;
246ec411 774 z = -__cosl (xx + xx);
f524e4a2
AJ
775 if ((s * c) < 0)
776 cc = z / ss;
777 else
778 ss = z / cc;
246ec411 779 z = ONEOSQPI * (p * cc - q * ss) / __ieee754_sqrtl (xx);
f524e4a2
AJ
780 return z;
781}
0ac5ae23 782strong_alias (__ieee754_j0l, __j0l_finite)
f524e4a2
AJ
783
784
785/* Y0(x) = 2/pi * log(x) * J0(x) + R(x^2)
786 Peak absolute error 1.7e-36 (relative where Y0 > 1)
787 0 <= x <= 2 */
788#define NY0_2N 7
789static long double Y0_2N[NY0_2N + 1] = {
790 -1.062023609591350692692296993537002558155E19L,
791 2.542000883190248639104127452714966858866E19L,
792 -1.984190771278515324281415820316054696545E18L,
793 4.982586044371592942465373274440222033891E16L,
794 -5.529326354780295177243773419090123407550E14L,
795 3.013431465522152289279088265336861140391E12L,
796 -7.959436160727126750732203098982718347785E9L,
797 8.230845651379566339707130644134372793322E6L,
798};
799#define NY0_2D 7
800static long double Y0_2D[NY0_2D + 1] = {
801 1.438972634353286978700329883122253752192E20L,
802 1.856409101981569254247700169486907405500E18L,
803 1.219693352678218589553725579802986255614E16L,
804 5.389428943282838648918475915779958097958E13L,
805 1.774125762108874864433872173544743051653E11L,
806 4.522104832545149534808218252434693007036E8L,
807 8.872187401232943927082914504125234454930E5L,
808 1.251945613186787532055610876304669413955E3L,
809 /* 1.000000000000000000000000000000000000000E0 */
810};
811
812
813/* Bessel function of the second kind, order zero. */
814
815long double
816 __ieee754_y0l(long double x)
817{
818 long double xx, xinv, z, p, q, c, s, cc, ss;
819
c5ee217f 820 if (! __finitel (x))
f524e4a2
AJ
821 {
822 if (x != x)
823 return x;
824 else
825 return 0.0L;
826 }
52e1b618
UD
827 if (x <= 0.0L)
828 {
829 if (x < 0.0L)
1f510b3f
AJ
830 return (zero / (zero * x));
831 return -HUGE_VALL + x;
52e1b618 832 }
f524e4a2
AJ
833 xx = fabsl (x);
834 if (xx <= 2.0L)
835 {
836 /* 0 <= x <= 2 */
837 z = xx * xx;
838 p = neval (z, Y0_2N, NY0_2N) / deval (z, Y0_2D, NY0_2D);
246ec411 839 p = TWOOPI * __ieee754_logl (x) * __ieee754_j0l (x) + p;
f524e4a2
AJ
840 return p;
841 }
842
843 xinv = 1.0L / xx;
844 z = xinv * xinv;
845 if (xinv <= 0.25)
846 {
847 if (xinv <= 0.125)
848 {
849 if (xinv <= 0.0625)
850 {
851 p = neval (z, P16_IN, NP16_IN) / deval (z, P16_ID, NP16_ID);
852 q = neval (z, Q16_IN, NQ16_IN) / deval (z, Q16_ID, NQ16_ID);
853 }
854 else
855 {
856 p = neval (z, P8_16N, NP8_16N) / deval (z, P8_16D, NP8_16D);
857 q = neval (z, Q8_16N, NQ8_16N) / deval (z, Q8_16D, NQ8_16D);
858 }
859 }
860 else if (xinv <= 0.1875)
861 {
862 p = neval (z, P5_8N, NP5_8N) / deval (z, P5_8D, NP5_8D);
863 q = neval (z, Q5_8N, NQ5_8N) / deval (z, Q5_8D, NQ5_8D);
864 }
865 else
866 {
867 p = neval (z, P4_5N, NP4_5N) / deval (z, P4_5D, NP4_5D);
868 q = neval (z, Q4_5N, NQ4_5N) / deval (z, Q4_5D, NQ4_5D);
869 }
870 } /* .25 */
871 else /* if (xinv <= 0.5) */
872 {
873 if (xinv <= 0.375)
874 {
875 if (xinv <= 0.3125)
876 {
877 p = neval (z, P3r2_4N, NP3r2_4N) / deval (z, P3r2_4D, NP3r2_4D);
878 q = neval (z, Q3r2_4N, NQ3r2_4N) / deval (z, Q3r2_4D, NQ3r2_4D);
879 }
880 else
881 {
882 p = neval (z, P2r7_3r2N, NP2r7_3r2N)
883 / deval (z, P2r7_3r2D, NP2r7_3r2D);
884 q = neval (z, Q2r7_3r2N, NQ2r7_3r2N)
885 / deval (z, Q2r7_3r2D, NQ2r7_3r2D);
886 }
887 }
888 else if (xinv <= 0.4375)
889 {
890 p = neval (z, P2r3_2r7N, NP2r3_2r7N)
891 / deval (z, P2r3_2r7D, NP2r3_2r7D);
892 q = neval (z, Q2r3_2r7N, NQ2r3_2r7N)
893 / deval (z, Q2r3_2r7D, NQ2r3_2r7D);
894 }
895 else
896 {
897 p = neval (z, P2_2r3N, NP2_2r3N) / deval (z, P2_2r3D, NP2_2r3D);
898 q = neval (z, Q2_2r3N, NQ2_2r3N) / deval (z, Q2_2r3D, NQ2_2r3D);
899 }
900 }
901 p = 1.0L + z * p;
902 q = z * xinv * q;
903 q = q - 0.125L * xinv;
904 /* X = x - pi/4
905 cos(X) = cos(x) cos(pi/4) + sin(x) sin(pi/4)
906 = 1/sqrt(2) * (cos(x) + sin(x))
907 sin(X) = sin(x) cos(pi/4) - cos(x) sin(pi/4)
908 = 1/sqrt(2) * (sin(x) - cos(x))
909 sin(x) +- cos(x) = -cos(2x)/(sin(x) -+ cos(x))
910 cf. Fdlibm. */
246ec411 911 __sincosl (x, &s, &c);
f524e4a2
AJ
912 ss = s - c;
913 cc = s + c;
246ec411 914 z = -__cosl (x + x);
f524e4a2
AJ
915 if ((s * c) < 0)
916 cc = z / ss;
917 else
918 ss = z / cc;
246ec411 919 z = ONEOSQPI * (p * ss + q * cc) / __ieee754_sqrtl (x);
f524e4a2
AJ
920 return z;
921}
0ac5ae23 922strong_alias (__ieee754_y0l, __y0l_finite)