@stdlib/esm
Version:
ES module distribution for Stdlib, a standard library for JavaScript and Node.js.
3 lines • 9.71 kB
JavaScript
// This file is a part of stdlib. License is Apache-2.0: http://www.apache.org/licenses/LICENSE-2.0
import r from"./../assert/is-nan.js";import t from"./../../../constants/math/float32-smallest-normal.js";import n from"./../../../constants/math/float64-pinf.js";import o from"./../../../vendor/debug.js";import e from"./../tools/evalpoly.js";import i from"./gammaln.js";import a from"./erfcinv.js";import m from"./gamma.js";import f from"./sqrt.js";import u from"./abs.js";import s from"./exp.js";import p from"./min.js";import c from"./pow.js";import v from"./ln.js";import l from"./../../../constants/math/float64-sqrt-two-pi.js";import h from"./../../../constants/math/float32-max.js";import j from"./../../../constants/math/float64-two-pi.js";import g from"./gammainc.js";import w from"./../../../constants/math/float64-ln-sqrt-two-pi.js";var d=o,b=g,N=u,x=s,q=v,W=h,T=d("gammaincinv:higher_newton");function y(r,t,n,o,e,i,a,m){var f,u,s,p,c,v,l,h,j;j=r,v=1,l=1,p=t*t,u=r;do{if(c=(j=r)*j,0===n){if((f=(1-t)*q(j)+j+i)>q(W))return T("Warning: overflow problems in one or more steps of the computation. The initial approximation to the root is returned."),u;h=x(f)}else h=-a*j;h=m?-h*(b(j,t,!0,!1)-o):h*(b(j,t,!0,!0)-e),o>1e-120||l>1?(s=(2*c-4*j*t+4*j+2*p-3*t+1)/c,r=j+h*(1+h*(.5*(j-t+1)/j+h*(s/=6)))):r=j+h,v=N(j/r-1),l+=1,(j=r)<0&&(j=u,l=100)}while(v>2e-14&&l<35);return(v>2e-14||l>99)&&T("Warning: the number of iterations in the Newton method reached the upper limit N=35. The last value obtained for the root is given as output."),j||0}function O(r){return 0===r?0:0+r*(1+r*(1+r*(1.5+r*(2.6666666666666665+r*(5.208333333333333+10.8*r)))))}function _(r){return 0===r?1:1+r*(1+r*(.3333333333333333+r*(.027777777777777776+r*(r*(.0002314814814814815+5878894767783657e-20*r)-.003703703703703704))))}var k=u,z=s,A=v,B=e,C=O,D=_,E=1e-8,F=.08333333333333333,G=.008333333333333333,H=[1,0,0,0,0,0];function I(r){var t,n,o,e,i,a,m,f,u;if(u=r*r*.5,0===r?i=0:r<-1?(f=z(-1-u),i=C(f)):r<1?i=D(f=r):(i=(f=11+u)+(a=A(f)),f=1/f,e=(o=(n=(t=a*a)*a)*a)*a,H[1]=.5*(2-a),H[2]=(-9*a+6+2*t)/6,H[3]=-(3*n+36*a-22*t-12)*F,H[4]=(60+350*t-300*a-125*n+12*o)/60,H[5]=-(-120-274*o+900*a-1700*t+1125*n+20*e)*G,i+=a*f*B(H,f)),f=1,r>-3.5&&r<-.03||r>.03&&r<40){f=1,m=i;do{i=m*(u+A(m))/(m-1),f=k(m/i-1),m=i}while(f>E)}return i}var J=[1.9963790515900766,-.0017971032528832887,13129285796384672e-21,-2.340875228178749e-7,7.2291210671127e-9,-3.280997607821e-10,19875070901e-21,-1509214183e-21,1375340084e-22,-145728923e-22,17532367e-22,-2351465e-22,346551e-22,-55471e-22,9548e-22,-1748e-22,3.32e-20,-58e-22];function K(r,t){var n,o,e,i,a;o=0,e=0,n=t+t,a=r;do{i=e,o=n*(e=o)-i+J[a],a-=1}while(a>=0);return(o-i)/2}function L(r){return 0===r?.025721014990011306:.025721014990011306+r*(.08247596616699963+r*(r*(.0006099292666946337+r*(.000250505279903*r-.00033543297638406))-.0025328157302663564))}function M(r){return 0===r?.08333333333333333:.08333333333333333+r*(r*(.0007936507936507937+-.0005952380952380953*r)-.002777777777777778)}var P=i,Q=v,R=w,S=t,U=h,V=K,X=L,Y=M,Z=.30865217988013566;function $(r){var t;return r<S?U:r<1?P(r+1)-(r+.5)*Q(r)+r-R:r<2?P(r)-(r-.5)*Q(r)+r-R:r<3?P(r-1)-(r-.5)*Q(r)+r-R+Q(r-1):r<12?V(17,t=18/(r*r)-1)/(12*r):(t=1/(r*r),r<1e3?X(t)/(Z+t)/r:Y(t)/r)}var rr=s,tr=m,nr=v,or=h,er=l,ir=$;function ar(r){return r>=3?rr(ir(r)):r>0?tr(r)/(rr(-r+(r-.5)*nr(r))*er):or}function mr(r){var t,n;return 0===r?-.3333333333438:((r<0?-r:r)<=1?(t=r*(r*(r*(-4293658292782e-17*r-.004923635739372)-.05041806657154)-.2070740359969)-.3333333333438,n=1+r*(.7045554412463+r*(.2118190062224+r*(.03048648397436+.001605037988091*r)))):(t=(r=1/r)*(r*(r*(-.3333333333438*r-.2070740359969)-.05041806657154)-.004923635739372)-4293658292782e-17,n=.001605037988091+r*(.03048648397436+r*(.2118190062224+r*(.7045554412463+1*r)))),t/n)}var fr=u,ur=v,sr=I,pr=mr;function cr(r){var t;return fr(r)<1?pr(r):(t=sr(r),ur(r/(t-1))/r)}function vr(r){var t,n;return 0===r?-.0172847633523:((r<0?-r:r)<=1?(t=r*(r*(r*(-614830384279e-17*r-.00060683488776)-.00464910887221)-.0159372646475)-.0172847633523,n=1+r*(.764050615669+r*(.297143406325+r*(.0579490176079+.00574558524851*r)))):(t=(r=1/r)*(r*(r*(-.0172847633523*r-.0159372646475)-.00464910887221)-.00060683488776)-614830384279e-17,n=.00574558524851+r*(.0579490176079+r*(.297143406325+r*(.764050615669+1*r)))),t/n)}function lr(r){var t,n;return 0===r?-.0172839517431:((r<0?-r:r)<=1?(t=r*(r*(r*(249634036069e-17*r-.000391032032692)-.00357406772616)-.0146362417966)-.0172839517431,n=1+r*(.690560400696+r*(.249962384741+r*(.0443843438769+.00424073217211*r)))):(t=249634036069e-17+(r=1/r)*(r*(r*(-.0172839517431*r-.0146362417966)-.00357406772616)-.000391032032692),n=.00424073217211+r*(.0443843438769+r*(.249962384741+r*(.690560400696+1*r)))),t/n)}function hr(r){var t,n;return 0===r?.99994466948:((r<0?-r:r)<=1?(t=.99994466948+r*(104.649839762+r*(857.204033806+r*(731.901559577+45.5174411671*r))),n=1+r*(104.526456943+r*(823.313447808+r*(3119.93802124+3970.03311219*r)))):(t=45.5174411671+(r=1/r)*(731.901559577+r*(857.204033806+r*(104.649839762+.99994466948*r))),n=3970.03311219+r*(3119.93802124+r*(823.313447808+r*(104.526456943+1*r)))),t/n)}var jr=v,gr=vr,wr=lr,dr=hr;function br(r){var t,n;return r<-5?(12-(n=r*r)-(t=jr(-r))*t*6)/(12*n*r):r<-2?gr(r):r<2?wr(r):r<1e3?(n=1/r,dr(r)/(-12*r)):-1/(12*r)}function Nr(r){var t,n;return 0===r?.0495346498136:((r<0?-r:r)<=1?(t=.0495346498136+r*(.0299521337141+r*(.00688296911516+r*(.000512634846317+-201411722031e-16*r))),n=1+r*(.759803615283+r*(.261547111595+r*(.0464854522477+.00403751193496*r)))):(t=(r=1/r)*(.000512634846317+r*(.00688296911516+r*(.0299521337141+.0495346498136*r)))-201411722031e-16,n=.00403751193496+r*(.0464854522477+r*(.261547111595+r*(.759803615283+1*r)))),t/n)}function xr(r){var t,n;return 0===r?.00452313583942:((r<0?-r:r)<=1?(t=.00452313583942+r*(.00120744920113+r*(r*(-535770949796e-17*r-504476066942e-16)-789724156582e-16)),n=1+r*(.912203410349+r*(.405368773071+r*(.0901638932349+.00948935714996*r)))):(t=(r=1/r)*(r*(r*(.00120744920113+.00452313583942*r)-789724156582e-16)-504476066942e-16)-535770949796e-17,n=.00948935714996+r*(.0901638932349+r*(.405368773071+r*(.912203410349+1*r)))),t/n)}function qr(r){var t,n;return 0===r?.00439937562904:((r<0?-r:r)<=1?(t=.00439937562904+r*(.000487225670639+r*(r*(529110969589e-17+1.5716677175e-7*r)-.000128470657374)),n=1+r*(.794435257415+r*(.333094721709+r*(.0703527806143+.00806110846078*r)))):(t=1.5716677175e-7+(r=1/r)*(529110969589e-17+r*(r*(.000487225670639+.00439937562904*r)-.000128470657374)),n=.00806110846078+r*(.0703527806143+r*(.333094721709+r*(.794435257415+1*r)))),t/n)}function Wr(r){var t,n;return 0===r?-.0011481191232:((r<0?-r:r)<=1?(t=r*(r*(1.51623048511+r*(.0730002451555*r-.218472031183))-.112850923276)-.0011481191232,n=1+r*(14.2482206905+r*(69.7360396285+r*(218.938950816+277.067027185*r)))):(t=.0730002451555+(r=1/r)*(r*(1.51623048511+r*(-.0011481191232*r-.112850923276))-.218472031183),n=277.067027185+r*(218.938950816+r*(69.7360396285+r*(14.2482206905+1*r)))),t/n)}function Tr(r){var t,n;return 0===r?-.000145727889667:((r<0?-r:r)<=1?(t=r*(r*(r*(199.722374056+-11.4311378756*r)-13.308504545)-.290806748131)-.000145727889667,n=1+r*(139.612587808+r*(2189.01116348+r*(7115.24019009+45574.6081453*r)))):(t=(r=1/r)*(199.722374056+r*(r*(-.000145727889667*r-.290806748131)-13.308504545))-11.4311378756,n=45574.6081453+r*(7115.24019009+r*(2189.01116348+r*(139.612587808+1*r)))),t/n)}var yr=v,Or=Nr,_r=xr,kr=qr,zr=Wr,Ar=Tr;function Br(r){var t,n;return r<-8?(t=r*r,(r*(n=yr(-r)/r)*(6*t*n*n-12+t)-30)/(12*r*t*t)):r<-4?Or(r)/(r*r):r<-2?_r(r):r<2?kr(r):r<10?zr(t=1/r)/(r*r):r<100?Ar(t=1/r)/(r*r):-yr(r)/(12*r*r*r)}var Cr=o,Dr=e,Er=i,Fr=a,Gr=m,Hr=f,Ir=u,Jr=s,Kr=p,Lr=c,Mr=v,Pr=l,Qr=h,Rr=j,Sr=y,Ur=I,Vr=ar,Xr=cr,Yr=br,Zr=Br,$r=Cr("gammaincinv:compute"),rt=.5,tt=.3333333333333333,nt=.25,ot=.2,et=.16666666666666666,it=.08333333333333333,at=.041666666666666664,mt=[0,0,0,0,0];function ft(r,t,n){var o,e,i,a,m,f,u,s,p,c,v,l,h,j,g,w,d,b,N,x,q,W,T,y,O,_,k,z,A,B,C,D,E,F,G,H,I,J,K,L;if(t<rt?(a=!0,m=t,J=-1):(a=!1,m=n,J=1),G=0,Ir(r-1)<1e-4&&(H=0,N=a?t<.001?t+(A=t*t)*rt+(_=A*t)*tt+(z=_*t)*nt+(b=z*t)*ot+b*t*et:-Mr(1-t):-Mr(n),1===r?(G=2,C=N):(i=Er(r),G=1)),n<1e-30&&r<rt&&(H=0,N=-Mr(n*Gr(r))+(r-1)*Mr(-Mr(n*Gr(r))),G=1,i=Er(r)),r>1&&r<500&&t<1e-80){for(H=0,f=1/r,o=1/(r+1),N=(Er(r+1)+Mr(t))*f,h=N=Jr(N),F=0;F<10;F++)N=h*Jr(N*f)*Lr(1-N*o,f);G=1,i=Er(r)}if((u=1/r*(Mr(t)+Er(r+1)))<Mr(ot*(1+r))&&0===G&&(I=Jr(u),H=0,k=(B=(x=r*r)*r)*r,c=(j=r+1)*(v=j*j),p=v*v,s=(g=r+2)*g,w=r+3,mt[0]=1,mt[1]=1/j,mt[2]=rt*(3*r+5)/(v*g),mt[3]=tt*(31+8*x+33*r)/(c*g*w),mt[4]=at*(2888+1179*B+125*k+3971*x+5661*r)/(p*s*w*(r+4)),N=I*Dr(mt,I),i=Er(r),G=1),r<10&&0===G&&(l=Hr(r)/(Vr(r)*Pr),n<Kr(.02,l)&&(H=0,O=(y=(D=1-r)*D)*D,d=Hr(-2/r*Mr(n/l)),N=r*Ur(d),E=Mr(N),N>5?(T=(W=(q=E*E)*E)*E,I=1/N,mt[0]=E-1,mt[1]=(3*D-2*D*E+q-2*E+2)*rt,mt[2]=(24*D*E-11*y-24*D-6*q+12*E-12-9*D*q+6*y*E+2*W)*et,mt[3]=(-12*O*E+8.04*D*q-114*y*E+(72+36*q)+(3*T-72*E+162)*(D-168*D*E)-(12*W+25*O)-(22*D*W+36*y*q+120*y))*it,mt[4]=0,N=N-E+D*I*Dr(mt,I)):(q=E*E,(K=E-D*(I=1/N)*(E-1))<N&&(N-=K)),i=Er(r),G=1)),Ir(m-rt)<1e-5&&0===G&&(H=0,N=r-tt+(.019753086419753086+.007211444248481286*(f=1/r))*f,i=Er(r),G=1),r<1&&0===G&&(H=0,N=Jr(a?1/r*(Mr(m)+Er(r+1)):1/r*(Mr(1-m)+Er(r+1))),i=Er(r),G=1),0===G){if(H=1,f=1/r,d=J*(I=Fr(2*m))/Hr(r*rt),!(I<Qr))return $r("Warning: Overflow problems in one or more steps of the computation."),NaN;d+=(Xr(d)+(Yr(d)+Zr(d)*f)*f)*f,N=r*Ur(d),L=d,e=1/(-Hr(r/Rr)*Jr(-rt*r*L*L)/Vr(r))}return G<2&&(C=Sr(N,r,H,t,n,i,e,a)),C}var ut=r,st=t,pt=n,ct=ft;function vt(r,t,n){return ut(r)||ut(t)||t<st||r>1||r<0?NaN:!0===n?0===r?pt:1===r?0:ct(t,1-r,r):0===r?0:1===r?pt:ct(t,r,1-r)}var lt=vt;export default lt;
//# sourceMappingURL=gammaincinv.js.map