UNPKG

double-double

Version:

Pure double-double precision functions *with strict error bounds*.

1 lines 12.4 kB
var t={d:(n,e)=>{for(var r in e)t.o(e,r)&&!t.o(n,r)&&Object.defineProperty(n,r,{enumerable:!0,get:e[r]})},o:(t,n)=>Object.prototype.hasOwnProperty.call(t,n)},n={};function e(t,n){const e=t[0],r=t[1],s=n[0],i=n[1],u=r-i,o=u-r,c=e-s,a=c-e,f=r-(u-o)+(-i-o)+c,d=u+f,l=e-(c-a)+(-s-a)+(f-(d-u)),g=d+l;return[l-(g-d),g]}t.d(n,{eZ:()=>At,ao:()=>it,NN:()=>l,ei:()=>b,zR:()=>g,e0:()=>p,QV:()=>sn,w0:()=>e,PA:()=>fn,vx:()=>w,A5:()=>P,q$:()=>at,pW:()=>v,rC:()=>un,SH:()=>Vt,Tn:()=>on,jL:()=>cn,kT:()=>an,zZ:()=>u,Rp:()=>s,IH:()=>S,Is:()=>O,Em:()=>B,Sw:()=>L,tp:()=>N,Lz:()=>x,QP:()=>I,Vd:()=>A,Kq:()=>m,cV:()=>T,Rc:()=>en,VL:()=>c,K_:()=>D,Vx:()=>Mt,P_:()=>dt,Mw:()=>Q,O$:()=>f,dC:()=>R,T7:()=>z,UF:()=>Tt,wO:()=>Ft,g6:()=>nt,gD:()=>q,uJ:()=>F,QK:()=>tt,aX:()=>X,O2:()=>et,v4:()=>qt,pE:()=>st,Ei:()=>rt,bt:()=>U,$n:()=>k,K1:()=>$,uI:()=>G,lD:()=>W,oi:()=>d,DL:()=>Pt,QC:()=>j,gB:()=>H,S4:()=>Z});const r=e;function s(t,n){return r(t,n)[1]>0?n:t}const i=e;function u(t,n){return i(t,n)[1]>0?t:n}const o=134217729;function c(t){const n=t[0],e=t[1];if(0===e)return[0,0];const r=Math.sqrt(e),s=r*r,i=o*r,u=i-(i-r),c=r-u,a=.5*(e-s-(c*c-(s-u*u-u*c*2))+n)/r;return[a-(r+a-r),r+a]}const a=134217729;function f(t){if(0===t)return[0,0];const n=Math.sqrt(t),e=n*n,r=a*n,s=r-(r-n),i=n-s,u=.5*(t-e-(i*i-(e-s*s-s*i*2)))/n;return[u-((t=n+u)-n),t]}function d(t,n){if(t-n<=0){const e=t>0?Math.sqrt(t):0;return{est:e,err:Math.max(Math.sqrt(t+n)-e,e)}}const e=Math.sqrt(t),r=Math.sqrt(t-n),s=Math.sqrt(t+n);return{est:e,err:Math.max(Math.abs(r-e),Math.abs(s-e))}}function l(t){const n=t[1];return n<0?[-t[0],-n]:t}function g(t,n){const e=t[0],r=t[1],s=r+n,i=s-r,u=e+(r-(s-i)+(n-i)),o=s+u;return[u-(o-s),o]}function b(t,n){const e=t[0],r=t[1],s=n[0],i=n[1],u=r+i,o=u-r,c=e+s,a=c-e,f=r-(u-o)+(i-o)+c,d=u+f,l=e-(c-a)+(s-a)+(f-(d-u)),g=d+l;return[l-(g-d),g]}Number.EPSILON;const h=2**27+1;function N(t,n){const e=t[1],r=n[1],s=e*r,i=h*e,u=i-(i-e),o=e-u,c=h*r,a=c-(c-r),f=r-a,d=o*f-(s-u*a-o*a-u*f)+(e*n[0]+t[0]*r),l=s+d;return[d-(l-s),l]}function m(t){let n=t[0];for(let e=1;e<t.length;e++)n=N(n,t[e]);return n}function D(t){let n=t[0];for(let e=1;e<t.length;e++)n=b(n,t[e]);return n}function p(t,n){const e=t[0],r=t[1],s=n[0],i=n[1],u=r-i,o=u-r,c=e-s,a=c-e,f=r-(u-o)+(-i-o)+c,d=u+f;return d+(e-(c-a)+(-s-a)+(f-(d-u)))}const M=134217729;function x(t,n){const e=n[0],r=n[1],s=r*t,i=M*r,u=i-(i-r),o=r-u,c=M*t,a=c-(c-t),f=t-a,d=e*t,l=s+d,g=d-(l-s)+(o*f-(s-u*a-o*a-u*f)),b=l+g;return[g-(b-l),b]}function I(t,n){const e=n[0],r=n[1],s=r*t,i=M*r,u=i-(i-r),o=r-u,c=M*t,a=c-(c-t),f=t-a,d=o*f-(s-u*a-o*a-u*f)+e*t,l=s+d;return[d-(l-s),l]}function S(t){return[2*t[0],2*t[1]]}function O(t){return[4*t[0],4*t[1]]}function w(t){return[t[0]/2,t[1]/2]}function B(t){return[-2*t[0],-2*t[1]]}function L(t){return[-4*t[0],-4*t[1]]}const E=134217729;function v(t,n){const e=t[0],r=t[1],s=r/n,i=s*n,u=E*s,o=u-(u-s),c=s-o,a=E*n,f=a-(a-n),d=n-f,l=(r-i-(c*d-(i-o*f-c*f-o*d))+e)/n,g=s+l;return[l-(g-s),g]}const y=134217729;function P(t,n){const e=t[0],r=t[1],s=n[0],i=n[1],u=r/i,o=i*u,c=y*i,a=c-(c-i),f=i-a,d=y*u,l=d-(d-u),g=u-l,b=s*u,h=o+b,N=b-(h-o)+(f*g-(o-a*l-f*l-a*g)),m=h+N,D=(r-m+(e-(N-(m-h))))/i,p=u+D;return[D-(p-u),p]}function A(t){return[-t[0],-t[1]]}function T(t){return t[1]}function q(t,n){const e=t-n;return[t-e-n,e]}function F(t,n){const e=t+n;return[n-(e-t),e]}const V=134217729;function W(t){const n=V*t,e=n-(n-t);return[e,t-e]}function j(t,n){const e=t-n,r=t-e;return[t-(e+r)+(r-n),e]}const C=134217729;function H(t,n){const e=t*n,r=C*t,s=r-(r-t),i=t-s,u=C*n,o=u-(u-n),c=n-o;return[i*c-(e-s*o-i*o-s*c),e]}const K=134217729;function Q(t,n){const e=t/n,r=e*n,s=K*e,i=s-(s-e),u=e-i,o=K*n,c=o-(o-n),a=n-c,f=(t-r-(u*a-(r-i*c-u*c-i*a)))/n,d=e+f;return[f-(d-e),d]}function Z(t,n){const e=t+n,r=e-t;return[t-(e-r)+(n-r),e]}function $(t,n){const e=(2**(53-n)+1)*t;return e-(e-t)}function z(t){const n=new ArrayBuffer(8);return new DataView(n).setFloat64(0,t,!1),Array.from(new Uint8Array(n))}function R(t){return z(t).map(_).join("")}function _(t){let n=t.toString(2);for(;n.length<8;n="0"+n);return n}function U(t){const n=z(t),e=n[0],r=n[1],s=e>>7,i=((127&e)<<4)+((240&r)>>4),u=0===i?0:16,o=0===i?i-1022:i-1023,c=n.slice(1);return c[0]=(15&r)+u,{sign:s,exponent:o,significand:c}}function k(t){const n=R(t),[,e,r,s]=n.match(/^(.)(.{11})(.{52})$/),i=0===parseInt(r,2)?"0":"1";return{full:e+r+i+s,sign:e,exponent:r,hidden:i,significand:s}}function G(t){return U(t).significand}function J(t){return Math.log2(t&-t)}function X(t){if(0===t||!Number.isFinite(t))return NaN;const n=G(t),e=n.length;for(let t=e-1;t>=0;t--){if(0===n[t])continue;const r=J(n[t]);if(Number.isFinite(r))return 8*(e-t-1)+r}return NaN}function Y(t){return t>=128?7:t>=64?6:t>=32?5:t>=16?4:t>=8?3:t>=4?2:t>=2?1:t>=1?0:NaN}function tt(t){if(0===t||!Number.isFinite(t))return NaN;const n=G(t),e=n.length;for(let t=0;t<e;t++){const r=Y(n[t]);if(Number.isFinite(r))return 8*(e-t-1)+r}return NaN}function nt(t){return U(t).exponent}function et(t,n,e){if(0===t)return!0;const r=nt(t),s=tt(t)-52+r;return X(t)-52+r>=e&&s<=n-1+e}function rt(t){if(0===t||!Number.isFinite(t))return NaN;const n=nt(t);return tt(t)-52+n}function st(t){if(0===t||!Number.isFinite(t))return NaN;const n=nt(t);return X(t)-52+n}function it(t){return 0===t?0:tt(t)-X(t)+1}const ut=P,ot=Number.EPSILON/2,ct=ot*ot;function at(t,n,e,r){const s=t[0],i=t[1],u=n[0],o=n[1],c=ut(t,n),a=Math.abs(s+i),f=Math.abs(u+o),d=f-ot*f-r;return d<=0?{est:c,err:Number.POSITIVE_INFINITY}:{est:c,err:(f*e+a*r)/d**2+9*ct*Math.abs(a/f)}}const ft=Number.EPSILON/2;function dt(t,n,e,r){const s=t/n,i=Math.abs(t),u=Math.abs(n),o=u-r;return o<=0?{est:s,err:Number.POSITIVE_INFINITY}:{est:s,err:(u*e+i*r)/o**2+ft*Math.abs(i/u)}}function lt(t){return new Array(t+1).join("0")}const{floor:gt,max:bt,round:ht,log2:Nt,log10:mt,ceil:Dt}=Math,pt=Nt(1024)/mt(1024);function Mt(t){let[n,e]=t,r=!1;if(e<0&&(e=-e,n=-n,r=!0),0===e)return"0";const s=bt(0,159-gt(Nt(e)));if(0===s){const t=(BigInt(ht(n))+BigInt(ht(e))).toString();return r?"-"+t:t}const i=BigInt(s),u=Dt(s/pt),o=BigInt(u),c=e*2**s;let a=function(t,n){if(0===n||0===Number(t))return t;const e=-1!==t.indexOf("-"),r=e?"-":"";e&&(t=t.slice(1)),t.startsWith("+")&&(t=t.slice(1));const s=t.indexOf(".");if(n>0){if(-1===s)return r+t+lt(n);const[e,i]=t.split(".");if(i.length<n)return r+e+i+lt(n-i.length);{const t=i.substring(0,n),s=i.substring(n);return r+e+t+(s?"."+s:"")}}n=-n;let i="",u="";if(-1===s?i=t:[i,u]=t.split("."),i.length===n)return r+"0."+i+u;if(i.length>n){const t=i.length-n;return r+i.substring(0,t)+"."+i.substring(t)+u}return r+"0."+(lt(n-i.length)||"0")+i+u}(((BigInt(ht(n*2**s))+BigInt(ht(c)))*10n**o/2n**i).toString(),-u);return a=function(t){if(-1===t.indexOf("."))return t;let n=0,e=0;for(;n<t.length&&"0"===t[t.length-1-n];)e++,n++;return e>0&&(t=t.slice(0,t.length-e)),t.endsWith(".")&&(t=t.slice(0,t.length-1)),t}(a),r?"-"+a:a}function xt(t){if(!t.startsWith("0."))return 0;if(0===Number(t))return 0;let n=1;for(let e=0;e<t.length&&"0"===t[e+2];e++)n++;return n}function It(t,n,e){const r=t.indexOf(".");let s=n+(-1!==r&&r<n?1:0),i=s;for(e=e||t.length;s<e;)"."!==t[i]?(t=St(t,i),s++,i++):i++;return t}function St(t,n){return n>t.length-1?t:t.substring(0,n)+"0"+t.substring(n+1)}const Ot=15;function wt(t){t.startsWith("+")&&(t=t.slice(1));let n=t.indexOf(".");-1===n&&(t+=".0"),n=t.indexOf(".");const e=xt(t);t.length<3*Ot+1&&(t+=new Array(3*Ot+2-t.length).join("0")),t=t.slice(0,3*Ot+(n>=3*Ot?0:1)+e),n>=3*Ot&&(t+=new Array(n-3*Ot+1).join("0"));let r=It(t,Ot+e),s=It(t,0,Ot+e);return s=It(s,2*Ot+e),{Z:e,seH:r,seL:s,seC:It(t,0,2*Ot+e)}}const{EPSILON:Bt}=Number,Lt=Bt/2+Bt**2/2;function Et(t){return t>0?t+t*Lt:t-t*Lt}const vt=new Float64Array(13);const{abs:yt}=Math;function Pt(t){const{str:n,exp:e,negative:r}=function(t){if(0===Number(t))return{str:"0",exp:0,negative:!1};const n=t.startsWith("-");n&&(t=t.slice(1));let e,r=0;({s:t,exp:r}=function(t){const n=t.indexOf("e");let e=0;return-1!==n&&(e=Number(t.slice(n+1)),t=t.slice(0,n)),{s:t,exp:e}}(t));const s=xt(t);if(s>0)e=(t=t.slice(s+1))[0]+"."+t.slice(1),r-=s;else{const n=function(t){if(t.startsWith("0."))return 0;if(0===Number(t))return 0;const n=t.indexOf(".");return-1===n?t.length:n}(t);e=(t=t.split("").filter((t=>"."!==t)).join(""))[0]+"."+t.slice(1),r=r+n-1}return e=e.slice(0,3*Ot+1),e.length<3*Ot+1&&(e+=new Array(3*Ot+1-e.length).join("0")),{str:e,exp:r,negative:n}}(t);r&&(t=t.slice(1));let{Z:s,seH:i,seL:u,seC:o}=wt(n);const c=Et(Number(i)),a=It(c.toFixed(3*Ot),0,Ot+s);let{Z:f,seH:d,seL:l}=wt(a);const h=Et(Number(d)),m=It(h.toFixed(3*Ot),f,Ot+f+1);let D=Et(Number(u));const p=function(t){if(0===Number(t))return 0;if(t.startsWith("0."))return 0;let n=0,e=0;for(;e<t.length&&"0"===t[e];e++)n++;return"."===t[e]?0:n}(u);let M=D.toFixed(3*Ot);M=It(M,Ot+s-p,2*Ot+s+1-p);const I=Number(m),S=Number(M),O=Number(o),w=Number(l),B=b(Z(I,-S),Z(O,-w));let L=b(g(Z(D,-h),c),B);const E=function(t){if(t<23)return[0,10**t];const n=t%23,e=t-n,r=e/23-1;return x(10**n,[vt[r]||(vt[r]=Number(10n**BigInt(e)-BigInt(10**e))),10**e])}(yt(e));L=0===e?L:e<0?P(L,E):N(L,E);const v=Et(L[1])-L[1];return L[0]=L[0]+v/2-v/2,L=r?L.map((t=>-t)):[L[0],L[1]],L}const At=[12246467991473535e-32,3.141592653589793],Tt=[14456468917292502e-32,2.718281828459045],qt=[23190468138463e-30,.6931471805599453],Ft=[-4942915152430649e-33,.5772156649015329];function Vt(t,n){return t[1]>n[1]||!(t[1]<n[1])&&t[0]>n[0]}const{trunc:Wt}=Math,jt=[0,1],Ct=Pt("-0.166666666666666666666666666666666667"),Ht=Pt("0.00833333333333333333333333333333333069"),Kt=Pt("-0.000198412698412698412698412698412671319"),Qt=Pt("2.75573192239858906525573192223995808e-6"),Zt=Pt("-2.50521083854417187750521077962123682e-8"),$t=Pt("1.60590438368216145993922289621550506e-10"),zt=Pt("-7.64716373181981647587481187300831335e-13"),Rt=Pt("2.81145725434552075980975905006999319e-15"),_t=Pt("-8.22063524662432650297086257962703293e-18"),Ut=Pt("1.95729410633890026175367390152305383e-20"),kt=Pt("-3.86817017051340241224838720319634797e-23"),Gt=Pt("6.44695023999222092772271073593727141e-26"),Jt=Pt("-9.1836779606017064087088551595474321e-29"),Xt=Pt("1.13078207057779775850779192271873238e-31"),Yt=Pt("1.19290046424220296937971101373203567e-34"),tn=v(At,2),nn=x(2,At);function en(t){let n=t[1]<0;if(n&&(t=[-t[0],-t[1]]),Vt(t,At)){const n=P(t,nn);t=e(t,x(Wt(n[1]+n[0]),nn))}Vt(t,At)&&(t=e(t,At),n=!n),Vt(t,tn)&&(t=e(At,t));const r=t,s=N(t,t),i=N(r,b(jt,N(s,b(Ct,N(s,b(Ht,N(s,b(Kt,N(s,b(Qt,N(s,b(Zt,N(s,b($t,N(s,b(zt,N(s,b(Rt,N(s,b(_t,N(s,b(Ut,N(s,b(kt,N(s,b(Gt,N(s,b(Jt,N(s,e(Xt,N(s,Yt)))))))))))))))))))))))))))))));return n?[-i[0],-i[1]]:i}const rn=v(At,2);function sn(t){return en(b(t,rn))}function un(t,n){return t[0]===n[0]&&t[1]===n[1]}function on(t,n){return t[1]>n[1]||!(t[1]<n[1])&&t[0]>=n[0]}function cn(t,n){return t[1]<n[1]||!(t[1]>n[1])&&t[0]<n[0]}function an(t,n){return t[1]<n[1]||!(t[1]>n[1])&&t[0]<=n[0]}function fn(t,n){const e=t[0],r=t[1],s=r-n,i=s-r,u=e-e,o=r-(s-i)+(-n-i)+e,c=s+o,a=e-(e-u)-u+(o-(c-s)),f=c+a;return[a-(f-c),f]}var dn=n.eZ,ln=n.ao,gn=n.NN,bn=n.ei,hn=n.zR,Nn=n.e0,mn=n.QV,Dn=n.w0,pn=n.PA,Mn=n.vx,xn=n.A5,In=n.q$,Sn=n.pW,On=n.rC,wn=n.SH,Bn=n.Tn,Ln=n.jL,En=n.kT,vn=n.zZ,yn=n.Rp,Pn=n.IH,An=n.Is,Tn=n.Em,qn=n.Sw,Fn=n.tp,Vn=n.Lz,Wn=n.QP,jn=n.Vd,Cn=n.Kq,Hn=n.cV,Kn=n.Rc,Qn=n.VL,Zn=n.K_,$n=n.Vx,zn=n.P_,Rn=n.Mw,_n=n.O$,Un=n.dC,kn=n.T7,Gn=n.UF,Jn=n.wO,Xn=n.g6,Yn=n.gD,te=n.uJ,ne=n.QK,ee=n.aX,re=n.O2,se=n.v4,ie=n.pE,ue=n.Ei,oe=n.bt,ce=n.$n,ae=n.K1,fe=n.uI,de=n.lD,le=n.oi,ge=n.DL,be=n.QC,he=n.gB,Ne=n.S4;export{dn as PIDd,ln as bitLength,gn as ddAbs,bn as ddAddDd,hn as ddAddDouble,Nn as ddCompare,mn as ddCos,Dn as ddDiffDd,pn as ddDiffDouble,Mn as ddDivBy2,xn as ddDivDd,In as ddDivDdWithError,Sn as ddDivDouble,On as ddEq,wn as ddGt,Bn as ddGte,Ln as ddLt,En as ddLte,vn as ddMax,yn as ddMin,Pn as ddMultBy2,An as ddMultBy4,Tn as ddMultByNeg2,qn as ddMultByNeg4,Fn as ddMultDd,Vn as ddMultDouble1,Wn as ddMultDouble2,jn as ddNegativeOf,Cn as ddProduct,Hn as ddSign,Kn as ddSin,Qn as ddSqrt,Zn as ddSum,$n as ddToStr,zn as divWithErr,Rn as doubleDivDouble,_n as doubleSqrt,Un as doubleToBinaryString,kn as doubleToOctets,Gn as eDd,Jn as eulerDd,Xn as exponent,Yn as fastTwoDiff,te as fastTwoSum,ne as getHighestSetBit,ee as getLowestSetBit,re as isBitAligned,se as ln2Dd,ie as lsbExponent,ue as msbExponent,oe as parseDouble,ce as parseDoubleDetailed,ae as reduceSignificand,fe as significand,de as split,le as sqrtWithErr,ge as strToDd,be as twoDiff,he as twoProduct,Ne as twoSum};