3 * Bessel function of order one
9 * __float128 x, y, j1q();
17 * Returns Bessel function of first kind, order one of the argument.
19 * The domain is divided into two major intervals [0, 2] and
20 * (2, infinity). In the first interval the rational approximation is
21 * J1(x) = .5x + x x^2 R(x^2)
23 * The second interval is further partitioned into eight equal segments
25 * J1(x) = sqrt(2/(pi x)) (P1(x) cos(X) - Q1(x) sin(X)),
28 * and the auxiliary functions are given by
30 * J1(x)cos(X) + Y1(x)sin(X) = sqrt( 2/(pi x)) P1(x),
31 * P1(x) = 1 + 1/x^2 R(1/x^2)
33 * Y1(x)cos(X) - J1(x)sin(X) = sqrt( 2/(pi x)) Q1(x),
34 * Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)).
41 * arithmetic domain # trials peak rms
42 * IEEE 0, 30 100000 2.8e-34 2.7e-35
49 * Bessel function of the second kind, order one
55 * __float128, y, y1q();
63 * Returns Bessel function of the second kind, of order
64 * one, of the argument.
66 * The domain is divided into two major intervals [0, 2] and
67 * (2, infinity). In the first interval the rational approximation is
68 * Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2) .
69 * In the second interval the approximation is the same as for J1(x), and
70 * Y1(x) = sqrt(2/(pi x)) (P1(x) sin(X) + Q1(x) cos(X)),
75 * Absolute error, when y0(x) < 1; else relative error:
77 * arithmetic domain # trials peak rms
78 * IEEE 0, 30 100000 2.7e-34 2.9e-35
82 /* Copyright 2001 by Stephen L. Moshier (moshier@na-net.onrl.gov).
84 This library is free software; you can redistribute it and/or
85 modify it under the terms of the GNU Lesser General Public
86 License as published by the Free Software Foundation; either
87 version 2.1 of the License, or (at your option) any later version.
89 This library is distributed in the hope that it will be useful,
90 but WITHOUT ANY WARRANTY; without even the implied warranty of
91 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
92 Lesser General Public License for more details.
94 You should have received a copy of the GNU Lesser General Public
95 License along with this library; if not, write to the Free Software
96 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
98 #include "quadmath-imp.h"
101 static const __float128 ONEOSQPI
= 5.6418958354775628694807945156077258584405E-1Q
;
103 static const __float128 TWOOPI
= 6.3661977236758134307553505349005744813784E-1Q
;
104 static const __float128 zero
= 0.0Q
;
106 /* J1(x) = .5x + x x^2 R(x^2)
107 Peak relative error 1.9e-35
110 static const __float128 J0_2N
[NJ0_2N
+ 1] = {
111 -5.943799577386942855938508697619735179660E16Q
,
112 1.812087021305009192259946997014044074711E15Q
,
113 -2.761698314264509665075127515729146460895E13Q
,
114 2.091089497823600978949389109350658815972E11Q
,
115 -8.546413231387036372945453565654130054307E8Q
,
116 1.797229225249742247475464052741320612261E6Q
,
117 -1.559552840946694171346552770008812083969E3Q
120 static const __float128 J0_2D
[NJ0_2D
+ 1] = {
121 9.510079323819108569501613916191477479397E17Q
,
122 1.063193817503280529676423936545854693915E16Q
,
123 5.934143516050192600795972192791775226920E13Q
,
124 2.168000911950620999091479265214368352883E11Q
,
125 5.673775894803172808323058205986256928794E8Q
,
126 1.080329960080981204840966206372671147224E6Q
,
127 1.411951256636576283942477881535283304912E3Q
,
128 /* 1.000000000000000000000000000000000000000E0Q */
131 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
133 Peak relative error 3.6e-36 */
135 static const __float128 P16_IN
[NP16_IN
+ 1] = {
136 5.143674369359646114999545149085139822905E-16Q
,
137 4.836645664124562546056389268546233577376E-13Q
,
138 1.730945562285804805325011561498453013673E-10Q
,
139 3.047976856147077889834905908605310585810E-8Q
,
140 2.855227609107969710407464739188141162386E-6Q
,
141 1.439362407936705484122143713643023998457E-4Q
,
142 3.774489768532936551500999699815873422073E-3Q
,
143 4.723962172984642566142399678920790598426E-2Q
,
144 2.359289678988743939925017240478818248735E-1Q
,
145 3.032580002220628812728954785118117124520E-1Q
,
148 static const __float128 P16_ID
[NP16_ID
+ 1] = {
149 4.389268795186898018132945193912677177553E-15Q
,
150 4.132671824807454334388868363256830961655E-12Q
,
151 1.482133328179508835835963635130894413136E-9Q
,
152 2.618941412861122118906353737117067376236E-7Q
,
153 2.467854246740858470815714426201888034270E-5Q
,
154 1.257192927368839847825938545925340230490E-3Q
,
155 3.362739031941574274949719324644120720341E-2Q
,
156 4.384458231338934105875343439265370178858E-1Q
,
157 2.412830809841095249170909628197264854651E0Q
,
158 4.176078204111348059102962617368214856874E0Q
,
159 /* 1.000000000000000000000000000000000000000E0 */
162 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
163 0.0625 <= 1/x <= 0.125
164 Peak relative error 1.9e-36 */
166 static const __float128 P8_16N
[NP8_16N
+ 1] = {
167 2.984612480763362345647303274082071598135E-16Q
,
168 1.923651877544126103941232173085475682334E-13Q
,
169 4.881258879388869396043760693256024307743E-11Q
,
170 6.368866572475045408480898921866869811889E-9Q
,
171 4.684818344104910450523906967821090796737E-7Q
,
172 2.005177298271593587095982211091300382796E-5Q
,
173 4.979808067163957634120681477207147536182E-4Q
,
174 6.946005761642579085284689047091173581127E-3Q
,
175 5.074601112955765012750207555985299026204E-2Q
,
176 1.698599455896180893191766195194231825379E-1Q
,
177 1.957536905259237627737222775573623779638E-1Q
,
178 2.991314703282528370270179989044994319374E-2Q
,
181 static const __float128 P8_16D
[NP8_16D
+ 1] = {
182 2.546869316918069202079580939942463010937E-15Q
,
183 1.644650111942455804019788382157745229955E-12Q
,
184 4.185430770291694079925607420808011147173E-10Q
,
185 5.485331966975218025368698195861074143153E-8Q
,
186 4.062884421686912042335466327098932678905E-6Q
,
187 1.758139661060905948870523641319556816772E-4Q
,
188 4.445143889306356207566032244985607493096E-3Q
,
189 6.391901016293512632765621532571159071158E-2Q
,
190 4.933040207519900471177016015718145795434E-1Q
,
191 1.839144086168947712971630337250761842976E0Q
,
192 2.715120873995490920415616716916149586579E0Q
,
193 /* 1.000000000000000000000000000000000000000E0 */
196 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
197 0.125 <= 1/x <= 0.1875
198 Peak relative error 1.3e-36 */
200 static const __float128 P5_8N
[NP5_8N
+ 1] = {
201 2.837678373978003452653763806968237227234E-12Q
,
202 9.726641165590364928442128579282742354806E-10Q
,
203 1.284408003604131382028112171490633956539E-7Q
,
204 8.524624695868291291250573339272194285008E-6Q
,
205 3.111516908953172249853673787748841282846E-4Q
,
206 6.423175156126364104172801983096596409176E-3Q
,
207 7.430220589989104581004416356260692450652E-2Q
,
208 4.608315409833682489016656279567605536619E-1Q
,
209 1.396870223510964882676225042258855977512E0Q
,
210 1.718500293904122365894630460672081526236E0Q
,
211 5.465927698800862172307352821870223855365E-1Q
214 static const __float128 P5_8D
[NP5_8D
+ 1] = {
215 2.421485545794616609951168511612060482715E-11Q
,
216 8.329862750896452929030058039752327232310E-9Q
,
217 1.106137992233383429630592081375289010720E-6Q
,
218 7.405786153760681090127497796448503306939E-5Q
,
219 2.740364785433195322492093333127633465227E-3Q
,
220 5.781246470403095224872243564165254652198E-2Q
,
221 6.927711353039742469918754111511109983546E-1Q
,
222 4.558679283460430281188304515922826156690E0Q
,
223 1.534468499844879487013168065728837900009E1Q
,
224 2.313927430889218597919624843161569422745E1Q
,
225 1.194506341319498844336768473218382828637E1Q
,
226 /* 1.000000000000000000000000000000000000000E0 */
229 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
230 Peak relative error 1.4e-36
231 0.1875 <= 1/x <= 0.25 */
233 static const __float128 P4_5N
[NP4_5N
+ 1] = {
234 1.846029078268368685834261260420933914621E-10Q
,
235 3.916295939611376119377869680335444207768E-8Q
,
236 3.122158792018920627984597530935323997312E-6Q
,
237 1.218073444893078303994045653603392272450E-4Q
,
238 2.536420827983485448140477159977981844883E-3Q
,
239 2.883011322006690823959367922241169171315E-2Q
,
240 1.755255190734902907438042414495469810830E-1Q
,
241 5.379317079922628599870898285488723736599E-1Q
,
242 7.284904050194300773890303361501726561938E-1Q
,
243 3.270110346613085348094396323925000362813E-1Q
,
244 1.804473805689725610052078464951722064757E-2Q
,
247 static const __float128 P4_5D
[NP4_5D
+ 1] = {
248 1.575278146806816970152174364308980863569E-9Q
,
249 3.361289173657099516191331123405675054321E-7Q
,
250 2.704692281550877810424745289838790693708E-5Q
,
251 1.070854930483999749316546199273521063543E-3Q
,
252 2.282373093495295842598097265627962125411E-2Q
,
253 2.692025460665354148328762368240343249830E-1Q
,
254 1.739892942593664447220951225734811133759E0Q
,
255 5.890727576752230385342377570386657229324E0Q
,
256 9.517442287057841500750256954117735128153E0Q
,
257 6.100616353935338240775363403030137736013E0Q
,
258 /* 1.000000000000000000000000000000000000000E0 */
261 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
262 Peak relative error 3.0e-36
263 0.25 <= 1/x <= 0.3125 */
265 static const __float128 P3r2_4N
[NP3r2_4N
+ 1] = {
266 8.240803130988044478595580300846665863782E-8Q
,
267 1.179418958381961224222969866406483744580E-5Q
,
268 6.179787320956386624336959112503824397755E-4Q
,
269 1.540270833608687596420595830747166658383E-2Q
,
270 1.983904219491512618376375619598837355076E-1Q
,
271 1.341465722692038870390470651608301155565E0Q
,
272 4.617865326696612898792238245990854646057E0Q
,
273 7.435574801812346424460233180412308000587E0Q
,
274 4.671327027414635292514599201278557680420E0Q
,
275 7.299530852495776936690976966995187714739E-1Q
,
278 static const __float128 P3r2_4D
[NP3r2_4D
+ 1] = {
279 7.032152009675729604487575753279187576521E-7Q
,
280 1.015090352324577615777511269928856742848E-4Q
,
281 5.394262184808448484302067955186308730620E-3Q
,
282 1.375291438480256110455809354836988584325E-1Q
,
283 1.836247144461106304788160919310404376670E0Q
,
284 1.314378564254376655001094503090935880349E1Q
,
285 4.957184590465712006934452500894672343488E1Q
,
286 9.287394244300647738855415178790263465398E1Q
,
287 7.652563275535900609085229286020552768399E1Q
,
288 2.147042473003074533150718117770093209096E1Q
,
289 /* 1.000000000000000000000000000000000000000E0 */
292 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
293 Peak relative error 1.0e-35
294 0.3125 <= 1/x <= 0.375 */
296 static const __float128 P2r7_3r2N
[NP2r7_3r2N
+ 1] = {
297 4.599033469240421554219816935160627085991E-7Q
,
298 4.665724440345003914596647144630893997284E-5Q
,
299 1.684348845667764271596142716944374892756E-3Q
,
300 2.802446446884455707845985913454440176223E-2Q
,
301 2.321937586453963310008279956042545173930E-1Q
,
302 9.640277413988055668692438709376437553804E-1Q
,
303 1.911021064710270904508663334033003246028E0Q
,
304 1.600811610164341450262992138893970224971E0Q
,
305 4.266299218652587901171386591543457861138E-1Q
,
306 1.316470424456061252962568223251247207325E-2Q
,
309 static const __float128 P2r7_3r2D
[NP2r7_3r2D
+ 1] = {
310 3.924508608545520758883457108453520099610E-6Q
,
311 4.029707889408829273226495756222078039823E-4Q
,
312 1.484629715787703260797886463307469600219E-2Q
,
313 2.553136379967180865331706538897231588685E-1Q
,
314 2.229457223891676394409880026887106228740E0Q
,
315 1.005708903856384091956550845198392117318E1Q
,
316 2.277082659664386953166629360352385889558E1Q
,
317 2.384726835193630788249826630376533988245E1Q
,
318 9.700989749041320895890113781610939632410E0Q
,
319 /* 1.000000000000000000000000000000000000000E0 */
322 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
323 Peak relative error 1.7e-36
324 0.3125 <= 1/x <= 0.4375 */
326 static const __float128 P2r3_2r7N
[NP2r3_2r7N
+ 1] = {
327 3.916766777108274628543759603786857387402E-6Q
,
328 3.212176636756546217390661984304645137013E-4Q
,
329 9.255768488524816445220126081207248947118E-3Q
,
330 1.214853146369078277453080641911700735354E-1Q
,
331 7.855163309847214136198449861311404633665E-1Q
,
332 2.520058073282978403655488662066019816540E0Q
,
333 3.825136484837545257209234285382183711466E0Q
,
334 2.432569427554248006229715163865569506873E0Q
,
335 4.877934835018231178495030117729800489743E-1Q
,
336 1.109902737860249670981355149101343427885E-2Q
,
339 static const __float128 P2r3_2r7D
[NP2r3_2r7D
+ 1] = {
340 3.342307880794065640312646341190547184461E-5Q
,
341 2.782182891138893201544978009012096558265E-3Q
,
342 8.221304931614200702142049236141249929207E-2Q
,
343 1.123728246291165812392918571987858010949E0Q
,
344 7.740482453652715577233858317133423434590E0Q
,
345 2.737624677567945952953322566311201919139E1Q
,
346 4.837181477096062403118304137851260715475E1Q
,
347 3.941098643468580791437772701093795299274E1Q
,
348 1.245821247166544627558323920382547533630E1Q
,
349 /* 1.000000000000000000000000000000000000000E0 */
352 /* J1(x)cosX + Y1(x)sinX = sqrt( 2/(pi x)) P1(x), P1(x) = 1 + 1/x^2 R(1/x^2),
353 Peak relative error 1.7e-35
354 0.4375 <= 1/x <= 0.5 */
356 static const __float128 P2_2r3N
[NP2_2r3N
+ 1] = {
357 3.397930802851248553545191160608731940751E-4Q
,
358 2.104020902735482418784312825637833698217E-2Q
,
359 4.442291771608095963935342749477836181939E-1Q
,
360 4.131797328716583282869183304291833754967E0Q
,
361 1.819920169779026500146134832455189917589E1Q
,
362 3.781779616522937565300309684282401791291E1Q
,
363 3.459605449728864218972931220783543410347E1Q
,
364 1.173594248397603882049066603238568316561E1Q
,
365 9.455702270242780642835086549285560316461E-1Q
,
368 static const __float128 P2_2r3D
[NP2_2r3D
+ 1] = {
369 2.899568897241432883079888249845707400614E-3Q
,
370 1.831107138190848460767699919531132426356E-1Q
,
371 3.999350044057883839080258832758908825165E0Q
,
372 3.929041535867957938340569419874195303712E1Q
,
373 1.884245613422523323068802689915538908291E2Q
,
374 4.461469948819229734353852978424629815929E2Q
,
375 5.004998753999796821224085972610636347903E2Q
,
376 2.386342520092608513170837883757163414100E2Q
,
377 3.791322528149347975999851588922424189957E1Q
,
378 /* 1.000000000000000000000000000000000000000E0 */
381 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
382 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
383 Peak relative error 8.0e-36
386 static const __float128 Q16_IN
[NQ16_IN
+ 1] = {
387 -3.917420835712508001321875734030357393421E-18Q
,
388 -4.440311387483014485304387406538069930457E-15Q
,
389 -1.951635424076926487780929645954007139616E-12Q
,
390 -4.318256438421012555040546775651612810513E-10Q
,
391 -5.231244131926180765270446557146989238020E-8Q
,
392 -3.540072702902043752460711989234732357653E-6Q
,
393 -1.311017536555269966928228052917534882984E-4Q
,
394 -2.495184669674631806622008769674827575088E-3Q
,
395 -2.141868222987209028118086708697998506716E-2Q
,
396 -6.184031415202148901863605871197272650090E-2Q
,
397 -1.922298704033332356899546792898156493887E-2Q
,
400 static const __float128 Q16_ID
[NQ16_ID
+ 1] = {
401 3.820418034066293517479619763498400162314E-17Q
,
402 4.340702810799239909648911373329149354911E-14Q
,
403 1.914985356383416140706179933075303538524E-11Q
,
404 4.262333682610888819476498617261895474330E-9Q
,
405 5.213481314722233980346462747902942182792E-7Q
,
406 3.585741697694069399299005316809954590558E-5Q
,
407 1.366513429642842006385029778105539457546E-3Q
,
408 2.745282599850704662726337474371355160594E-2Q
,
409 2.637644521611867647651200098449903330074E-1Q
,
410 1.006953426110765984590782655598680488746E0Q
,
411 /* 1.000000000000000000000000000000000000000E0 */
414 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
415 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
416 Peak relative error 1.9e-36
417 0.0625 <= 1/x <= 0.125 */
419 static const __float128 Q8_16N
[NQ8_16N
+ 1] = {
420 -2.028630366670228670781362543615221542291E-17Q
,
421 -1.519634620380959966438130374006858864624E-14Q
,
422 -4.540596528116104986388796594639405114524E-12Q
,
423 -7.085151756671466559280490913558388648274E-10Q
,
424 -6.351062671323970823761883833531546885452E-8Q
,
425 -3.390817171111032905297982523519503522491E-6Q
,
426 -1.082340897018886970282138836861233213972E-4Q
,
427 -2.020120801187226444822977006648252379508E-3Q
,
428 -2.093169910981725694937457070649605557555E-2Q
,
429 -1.092176538874275712359269481414448063393E-1Q
,
430 -2.374790947854765809203590474789108718733E-1Q
,
431 -1.365364204556573800719985118029601401323E-1Q
,
434 static const __float128 Q8_16D
[NQ8_16D
+ 1] = {
435 1.978397614733632533581207058069628242280E-16Q
,
436 1.487361156806202736877009608336766720560E-13Q
,
437 4.468041406888412086042576067133365913456E-11Q
,
438 7.027822074821007443672290507210594648877E-9Q
,
439 6.375740580686101224127290062867976007374E-7Q
,
440 3.466887658320002225888644977076410421940E-5Q
,
441 1.138625640905289601186353909213719596986E-3Q
,
442 2.224470799470414663443449818235008486439E-2Q
,
443 2.487052928527244907490589787691478482358E-1Q
,
444 1.483927406564349124649083853892380899217E0Q
,
445 4.182773513276056975777258788903489507705E0Q
,
446 4.419665392573449746043880892524360870944E0Q
,
447 /* 1.000000000000000000000000000000000000000E0 */
450 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
451 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
452 Peak relative error 1.5e-35
453 0.125 <= 1/x <= 0.1875 */
455 static const __float128 Q5_8N
[NQ5_8N
+ 1] = {
456 -3.656082407740970534915918390488336879763E-13Q
,
457 -1.344660308497244804752334556734121771023E-10Q
,
458 -1.909765035234071738548629788698150760791E-8Q
,
459 -1.366668038160120210269389551283666716453E-6Q
,
460 -5.392327355984269366895210704976314135683E-5Q
,
461 -1.206268245713024564674432357634540343884E-3Q
,
462 -1.515456784370354374066417703736088291287E-2Q
,
463 -1.022454301137286306933217746545237098518E-1Q
,
464 -3.373438906472495080504907858424251082240E-1Q
,
465 -4.510782522110845697262323973549178453405E-1Q
,
466 -1.549000892545288676809660828213589804884E-1Q
,
469 static const __float128 Q5_8D
[NQ5_8D
+ 1] = {
470 3.565550843359501079050699598913828460036E-12Q
,
471 1.321016015556560621591847454285330528045E-9Q
,
472 1.897542728662346479999969679234270605975E-7Q
,
473 1.381720283068706710298734234287456219474E-5Q
,
474 5.599248147286524662305325795203422873725E-4Q
,
475 1.305442352653121436697064782499122164843E-2Q
,
476 1.750234079626943298160445750078631894985E-1Q
,
477 1.311420542073436520965439883806946678491E0Q
,
478 5.162757689856842406744504211089724926650E0Q
,
479 9.527760296384704425618556332087850581308E0Q
,
480 6.604648207463236667912921642545100248584E0Q
,
481 /* 1.000000000000000000000000000000000000000E0 */
484 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
485 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
486 Peak relative error 1.3e-35
487 0.1875 <= 1/x <= 0.25 */
489 static const __float128 Q4_5N
[NQ4_5N
+ 1] = {
490 -4.079513568708891749424783046520200903755E-11Q
,
491 -9.326548104106791766891812583019664893311E-9Q
,
492 -8.016795121318423066292906123815687003356E-7Q
,
493 -3.372350544043594415609295225664186750995E-5Q
,
494 -7.566238665947967882207277686375417983917E-4Q
,
495 -9.248861580055565402130441618521591282617E-3Q
,
496 -6.033106131055851432267702948850231270338E-2Q
,
497 -1.966908754799996793730369265431584303447E-1Q
,
498 -2.791062741179964150755788226623462207560E-1Q
,
499 -1.255478605849190549914610121863534191666E-1Q
,
500 -4.320429862021265463213168186061696944062E-3Q
,
503 static const __float128 Q4_5D
[NQ4_5D
+ 1] = {
504 3.978497042580921479003851216297330701056E-10Q
,
505 9.203304163828145809278568906420772246666E-8Q
,
506 8.059685467088175644915010485174545743798E-6Q
,
507 3.490187375993956409171098277561669167446E-4Q
,
508 8.189109654456872150100501732073810028829E-3Q
,
509 1.072572867311023640958725265762483033769E-1Q
,
510 7.790606862409960053675717185714576937994E-1Q
,
511 3.016049768232011196434185423512777656328E0Q
,
512 5.722963851442769787733717162314477949360E0Q
,
513 4.510527838428473279647251350931380867663E0Q
,
514 /* 1.000000000000000000000000000000000000000E0 */
517 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
518 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
519 Peak relative error 2.1e-35
520 0.25 <= 1/x <= 0.3125 */
522 static const __float128 Q3r2_4N
[NQ3r2_4N
+ 1] = {
523 -1.087480809271383885936921889040388133627E-8Q
,
524 -1.690067828697463740906962973479310170932E-6Q
,
525 -9.608064416995105532790745641974762550982E-5Q
,
526 -2.594198839156517191858208513873961837410E-3Q
,
527 -3.610954144421543968160459863048062977822E-2Q
,
528 -2.629866798251843212210482269563961685666E-1Q
,
529 -9.709186825881775885917984975685752956660E-1Q
,
530 -1.667521829918185121727268867619982417317E0Q
,
531 -1.109255082925540057138766105229900943501E0Q
,
532 -1.812932453006641348145049323713469043328E-1Q
,
535 static const __float128 Q3r2_4D
[NQ3r2_4D
+ 1] = {
536 1.060552717496912381388763753841473407026E-7Q
,
537 1.676928002024920520786883649102388708024E-5Q
,
538 9.803481712245420839301400601140812255737E-4Q
,
539 2.765559874262309494758505158089249012930E-2Q
,
540 4.117921827792571791298862613287549140706E-1Q
,
541 3.323769515244751267093378361930279161413E0Q
,
542 1.436602494405814164724810151689705353670E1Q
,
543 3.163087869617098638064881410646782408297E1Q
,
544 3.198181264977021649489103980298349589419E1Q
,
545 1.203649258862068431199471076202897823272E1Q
,
546 /* 1.000000000000000000000000000000000000000E0 */
549 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
550 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
551 Peak relative error 1.6e-36
552 0.3125 <= 1/x <= 0.375 */
554 static const __float128 Q2r7_3r2N
[NQ2r7_3r2N
+ 1] = {
555 -1.723405393982209853244278760171643219530E-7Q
,
556 -2.090508758514655456365709712333460087442E-5Q
,
557 -9.140104013370974823232873472192719263019E-4Q
,
558 -1.871349499990714843332742160292474780128E-2Q
,
559 -1.948930738119938669637865956162512983416E-1Q
,
560 -1.048764684978978127908439526343174139788E0Q
,
561 -2.827714929925679500237476105843643064698E0Q
,
562 -3.508761569156476114276988181329773987314E0Q
,
563 -1.669332202790211090973255098624488308989E0Q
,
564 -1.930796319299022954013840684651016077770E-1Q
,
567 static const __float128 Q2r7_3r2D
[NQ2r7_3r2D
+ 1] = {
568 1.680730662300831976234547482334347983474E-6Q
,
569 2.084241442440551016475972218719621841120E-4Q
,
570 9.445316642108367479043541702688736295579E-3Q
,
571 2.044637889456631896650179477133252184672E-1Q
,
572 2.316091982244297350829522534435350078205E0Q
,
573 1.412031891783015085196708811890448488865E1Q
,
574 4.583830154673223384837091077279595496149E1Q
,
575 7.549520609270909439885998474045974122261E1Q
,
576 5.697605832808113367197494052388203310638E1Q
,
577 1.601496240876192444526383314589371686234E1Q
,
578 /* 1.000000000000000000000000000000000000000E0 */
581 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
582 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
583 Peak relative error 9.5e-36
584 0.375 <= 1/x <= 0.4375 */
586 static const __float128 Q2r3_2r7N
[NQ2r3_2r7N
+ 1] = {
587 -8.603042076329122085722385914954878953775E-7Q
,
588 -7.701746260451647874214968882605186675720E-5Q
,
589 -2.407932004380727587382493696877569654271E-3Q
,
590 -3.403434217607634279028110636919987224188E-2Q
,
591 -2.348707332185238159192422084985713102877E-1Q
,
592 -7.957498841538254916147095255700637463207E-1Q
,
593 -1.258469078442635106431098063707934348577E0Q
,
594 -8.162415474676345812459353639449971369890E-1Q
,
595 -1.581783890269379690141513949609572806898E-1Q
,
596 -1.890595651683552228232308756569450822905E-3Q
,
599 static const __float128 Q2r3_2r7D
[NQ2r3_2r7D
+ 1] = {
600 8.390017524798316921170710533381568175665E-6Q
,
601 7.738148683730826286477254659973968763659E-4Q
,
602 2.541480810958665794368759558791634341779E-2Q
,
603 3.878879789711276799058486068562386244873E-1Q
,
604 3.003783779325811292142957336802456109333E0Q
,
605 1.206480374773322029883039064575464497400E1Q
,
606 2.458414064785315978408974662900438351782E1Q
,
607 2.367237826273668567199042088835448715228E1Q
,
608 9.231451197519171090875569102116321676763E0Q
,
609 /* 1.000000000000000000000000000000000000000E0 */
612 /* Y1(x)cosX - J1(x)sinX = sqrt( 2/(pi x)) Q1(x),
613 Q1(x) = 1/x (.375 + 1/x^2 R(1/x^2)),
614 Peak relative error 1.4e-36
615 0.4375 <= 1/x <= 0.5 */
617 static const __float128 Q2_2r3N
[NQ2_2r3N
+ 1] = {
618 -5.552507516089087822166822364590806076174E-6Q
,
619 -4.135067659799500521040944087433752970297E-4Q
,
620 -1.059928728869218962607068840646564457980E-2Q
,
621 -1.212070036005832342565792241385459023801E-1Q
,
622 -6.688350110633603958684302153362735625156E-1Q
,
623 -1.793587878197360221340277951304429821582E0Q
,
624 -2.225407682237197485644647380483725045326E0Q
,
625 -1.123402135458940189438898496348239744403E0Q
,
626 -1.679187241566347077204805190763597299805E-1Q
,
627 -1.458550613639093752909985189067233504148E-3Q
,
630 static const __float128 Q2_2r3D
[NQ2_2r3D
+ 1] = {
631 5.415024336507980465169023996403597916115E-5Q
,
632 4.179246497380453022046357404266022870788E-3Q
,
633 1.136306384261959483095442402929502368598E-1Q
,
634 1.422640343719842213484515445393284072830E0Q
,
635 8.968786703393158374728850922289204805764E0Q
,
636 2.914542473339246127533384118781216495934E1Q
,
637 4.781605421020380669870197378210457054685E1Q
,
638 3.693865837171883152382820584714795072937E1Q
,
639 1.153220502744204904763115556224395893076E1Q
,
640 /* 1.000000000000000000000000000000000000000E0 */
644 /* Evaluate P[n] x^n + P[n-1] x^(n-1) + ... + P[0] */
647 neval (__float128 x
, const __float128
*p
, int n
)
662 /* Evaluate x^n+1 + P[n] x^(n) + P[n-1] x^(n-1) + ... + P[0] */
665 deval (__float128 x
, const __float128
*p
, int n
)
680 /* Bessel function of the first kind, order one. */
685 __float128 xx
, xinv
, z
, p
, q
, c
, s
, cc
, ss
;
701 p
= xx
* z
* neval (z
, J0_2N
, NJ0_2N
) / deval (z
, J0_2D
, NJ0_2D
);
716 p
= neval (z
, P16_IN
, NP16_IN
) / deval (z
, P16_ID
, NP16_ID
);
717 q
= neval (z
, Q16_IN
, NQ16_IN
) / deval (z
, Q16_ID
, NQ16_ID
);
721 p
= neval (z
, P8_16N
, NP8_16N
) / deval (z
, P8_16D
, NP8_16D
);
722 q
= neval (z
, Q8_16N
, NQ8_16N
) / deval (z
, Q8_16D
, NQ8_16D
);
725 else if (xinv
<= 0.1875)
727 p
= neval (z
, P5_8N
, NP5_8N
) / deval (z
, P5_8D
, NP5_8D
);
728 q
= neval (z
, Q5_8N
, NQ5_8N
) / deval (z
, Q5_8D
, NQ5_8D
);
732 p
= neval (z
, P4_5N
, NP4_5N
) / deval (z
, P4_5D
, NP4_5D
);
733 q
= neval (z
, Q4_5N
, NQ4_5N
) / deval (z
, Q4_5D
, NQ4_5D
);
736 else /* if (xinv <= 0.5) */
742 p
= neval (z
, P3r2_4N
, NP3r2_4N
) / deval (z
, P3r2_4D
, NP3r2_4D
);
743 q
= neval (z
, Q3r2_4N
, NQ3r2_4N
) / deval (z
, Q3r2_4D
, NQ3r2_4D
);
747 p
= neval (z
, P2r7_3r2N
, NP2r7_3r2N
)
748 / deval (z
, P2r7_3r2D
, NP2r7_3r2D
);
749 q
= neval (z
, Q2r7_3r2N
, NQ2r7_3r2N
)
750 / deval (z
, Q2r7_3r2D
, NQ2r7_3r2D
);
753 else if (xinv
<= 0.4375)
755 p
= neval (z
, P2r3_2r7N
, NP2r3_2r7N
)
756 / deval (z
, P2r3_2r7D
, NP2r3_2r7D
);
757 q
= neval (z
, Q2r3_2r7N
, NQ2r3_2r7N
)
758 / deval (z
, Q2r3_2r7D
, NQ2r3_2r7D
);
762 p
= neval (z
, P2_2r3N
, NP2_2r3N
) / deval (z
, P2_2r3D
, NP2_2r3D
);
763 q
= neval (z
, Q2_2r3N
, NQ2_2r3N
) / deval (z
, Q2_2r3D
, NQ2_2r3D
);
768 q
= q
* xinv
+ 0.375Q
* xinv
;
770 cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4)
771 = 1/sqrt(2) * (-cos(x) + sin(x))
772 sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4)
773 = -1/sqrt(2) * (sin(x) + cos(x))
775 sincosq (xx
, &s
, &c
);
783 z
= ONEOSQPI
* (p
* cc
- q
* ss
) / sqrtq (xx
);
790 /* Y1(x) = 2/pi * (log(x) * J1(x) - 1/x) + x R(x^2)
791 Peak relative error 6.2e-38
794 static __float128 Y0_2N
[NY0_2N
+ 1] = {
795 -6.804415404830253804408698161694720833249E19Q
,
796 1.805450517967019908027153056150465849237E19Q
,
797 -8.065747497063694098810419456383006737312E17Q
,
798 1.401336667383028259295830955439028236299E16Q
,
799 -1.171654432898137585000399489686629680230E14Q
,
800 5.061267920943853732895341125243428129150E11Q
,
801 -1.096677850566094204586208610960870217970E9Q
,
802 9.541172044989995856117187515882879304461E5Q
,
805 static __float128 Y0_2D
[NY0_2D
+ 1] = {
806 3.470629591820267059538637461549677594549E20Q
,
807 4.120796439009916326855848107545425217219E18Q
,
808 2.477653371652018249749350657387030814542E16Q
,
809 9.954678543353888958177169349272167762797E13Q
,
810 2.957927997613630118216218290262851197754E11Q
,
811 6.748421382188864486018861197614025972118E8Q
,
812 1.173453425218010888004562071020305709319E6Q
,
813 1.450335662961034949894009554536003377187E3Q
,
814 /* 1.000000000000000000000000000000000000000E0 */
818 /* Bessel function of the second kind, order one. */
823 __float128 xx
, xinv
, z
, p
, q
, c
, s
, cc
, ss
;
835 return (zero
/ (zero
* x
));
836 return -HUGE_VALQ
+ x
;
845 p
= xx
* neval (z
, Y0_2N
, NY0_2N
) / deval (z
, Y0_2D
, NY0_2D
);
846 p
= -TWOOPI
/ xx
+ p
;
847 p
= TWOOPI
* logq (x
) * j1q (x
) + p
;
859 p
= neval (z
, P16_IN
, NP16_IN
) / deval (z
, P16_ID
, NP16_ID
);
860 q
= neval (z
, Q16_IN
, NQ16_IN
) / deval (z
, Q16_ID
, NQ16_ID
);
864 p
= neval (z
, P8_16N
, NP8_16N
) / deval (z
, P8_16D
, NP8_16D
);
865 q
= neval (z
, Q8_16N
, NQ8_16N
) / deval (z
, Q8_16D
, NQ8_16D
);
868 else if (xinv
<= 0.1875)
870 p
= neval (z
, P5_8N
, NP5_8N
) / deval (z
, P5_8D
, NP5_8D
);
871 q
= neval (z
, Q5_8N
, NQ5_8N
) / deval (z
, Q5_8D
, NQ5_8D
);
875 p
= neval (z
, P4_5N
, NP4_5N
) / deval (z
, P4_5D
, NP4_5D
);
876 q
= neval (z
, Q4_5N
, NQ4_5N
) / deval (z
, Q4_5D
, NQ4_5D
);
879 else /* if (xinv <= 0.5) */
885 p
= neval (z
, P3r2_4N
, NP3r2_4N
) / deval (z
, P3r2_4D
, NP3r2_4D
);
886 q
= neval (z
, Q3r2_4N
, NQ3r2_4N
) / deval (z
, Q3r2_4D
, NQ3r2_4D
);
890 p
= neval (z
, P2r7_3r2N
, NP2r7_3r2N
)
891 / deval (z
, P2r7_3r2D
, NP2r7_3r2D
);
892 q
= neval (z
, Q2r7_3r2N
, NQ2r7_3r2N
)
893 / deval (z
, Q2r7_3r2D
, NQ2r7_3r2D
);
896 else if (xinv
<= 0.4375)
898 p
= neval (z
, P2r3_2r7N
, NP2r3_2r7N
)
899 / deval (z
, P2r3_2r7D
, NP2r3_2r7D
);
900 q
= neval (z
, Q2r3_2r7N
, NQ2r3_2r7N
)
901 / deval (z
, Q2r3_2r7D
, NQ2r3_2r7D
);
905 p
= neval (z
, P2_2r3N
, NP2_2r3N
) / deval (z
, P2_2r3D
, NP2_2r3D
);
906 q
= neval (z
, Q2_2r3N
, NQ2_2r3N
) / deval (z
, Q2_2r3D
, NQ2_2r3D
);
911 q
= q
* xinv
+ 0.375Q
* xinv
;
913 cos(X) = cos(x) cos(3 pi/4) + sin(x) sin(3 pi/4)
914 = 1/sqrt(2) * (-cos(x) + sin(x))
915 sin(X) = sin(x) cos(3 pi/4) - cos(x) sin(3 pi/4)
916 = -1/sqrt(2) * (sin(x) + cos(x))
918 sincosq (xx
, &s
, &c
);
926 z
= ONEOSQPI
* (p
* ss
+ q
* cc
) / sqrtq (xx
);