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