UNPKG

double-double

Version:

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

1 lines 11.2 kB
var n={};function t(n,t){const r=n[0],e=n[1],u=t[0],i=t[1],o=e-i,c=o-e,s=r-u,f=s-r,l=e-(o-c)+(-i-c)+s,a=o+l,h=r-(s-f)+(-u-f)+(l-(a-o)),g=a+h;return[h-(g-a),g]}n.d=(t,r)=>{for(var e in r)n.o(r,e)&&!n.o(t,e)&&Object.defineProperty(t,e,{enumerable:!0,get:r[e]})},n.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t);const r=t;function e(n,t){return r(n,t)[1]>0?t:n}const u=t;function i(n,t){return u(n,t)[1]>0?n:t}function o(n){const t=n[0],r=n[1];if(0===r)return[0,0];const e=Math.sqrt(r),u=e*e,i=134217729*e,o=i-(i-e),c=e-o,s=.5*(r-u-(c*c-(u-o*o-o*c*2))+t)/e;return[s-(e+s-e),e+s]}function c(n){if(0===n)return[0,0];const t=Math.sqrt(n),r=t*t,e=134217729*t,u=e-(e-t),i=t-u,o=.5*(n-r-(i*i-(r-u*u-u*i*2)))/t;return[o-((n=t+o)-t),n]}function s(n,t){if(n-t<=0){const r=n>0?Math.sqrt(n):0;return{est:r,err:Math.max(Math.sqrt(n+t)-r,r)}}const r=Math.sqrt(n),e=Math.sqrt(n-t),u=Math.sqrt(n+t);return{est:r,err:Math.max(Math.abs(e-r),Math.abs(u-r))}}function f(n){const t=n[1];return t<0?[-n[0],-t]:n}function l(n,t){const r=n[0],e=n[1],u=e+t,i=u-e,o=r+(e-(u-i)+(t-i)),c=u+o;return[o-(c-u),c]}function a(n,t){const r=n[0],e=n[1],u=t[0],i=t[1],o=e+i,c=o-e,s=r+u,f=s-r,l=e-(o-c)+(i-c)+s,a=o+l,h=r-(s-f)+(u-f)+(l-(a-o)),g=a+h;return[h-(g-a),g]}Number.EPSILON;const h=2**27+1;function g(n,t){const r=n[1],e=t[1],u=r*e,i=h*r,o=i-(i-r),c=r-o,s=h*e,f=s-(s-e),l=e-f,a=c*l-(u-o*f-c*f-o*l)+(r*t[0]+n[0]*e),g=u+a;return[a-(g-u),g]}function N(n){let t=n[0];for(let r=1;r<n.length;r++)t=g(t,n[r]);return t}function b(n){let t=n[0];for(let r=1;r<n.length;r++)t=a(t,n[r]);return t}function m(n,t){const r=n[0],e=n[1],u=t[0],i=t[1],o=e-i,c=o-e,s=r-u,f=s-r,l=e-(o-c)+(-i-c)+s,a=o+l;return a+(r-(s-f)+(-u-f)+(l-(a-o)))}const x=134217729;function I(n,t){const r=t[0],e=t[1],u=e*n,i=x*e,o=i-(i-e),c=e-o,s=x*n,f=s-(s-n),l=n-f,a=r*n,h=u+a,g=a-(h-u)+(c*l-(u-o*f-c*f-o*l)),N=h+g;return[g-(N-h),N]}function M(n,t){const r=t[0],e=t[1],u=e*n,i=x*e,o=i-(i-e),c=e-o,s=x*n,f=s-(s-n),l=n-f,a=c*l-(u-o*f-c*f-o*l)+r*n,h=u+a;return[a-(h-u),h]}function d(n){return[2*n[0],2*n[1]]}function p(n){return[4*n[0],4*n[1]]}function O(n){return[n[0]/2,n[1]/2]}function F(n){return[-2*n[0],-2*n[1]]}function y(n){return[-4*n[0],-4*n[1]]}const w=134217729;function B(n,t){const r=n[0],e=n[1],u=e/t,i=u*t,o=w*u,c=o-(o-u),s=u-c,f=w*t,l=f-(f-t),a=t-l,h=(e-i-(s*a-(i-c*l-s*l-c*a))+r)/t,g=u+h;return[h-(g-u),g]}const S=134217729;function j(n,t){const r=n[0],e=n[1],u=t[0],i=t[1],o=e/i,c=i*o,s=S*i,f=s-(s-i),l=i-f,a=S*o,h=a-(a-o),g=o-h,N=u*o,b=c+N,m=N-(b-c)+(l*g-(c-f*h-l*h-f*g)),x=b+m,I=(e-x+(r-(m-(x-b))))/i,M=o+I;return[I-(M-o),M]}function A(n){return[-n[0],-n[1]]}function P(n){return n[1]}function q(n,t){const r=n-t;return[n-r-t,r]}function L(n,t){const r=n+t;return[t-(r-n),r]}function W(n){const t=134217729*n,r=t-(t-n);return[r,n-r]}function E(n,t){const r=n-t,e=n-r;return[n-(r+e)+(e-t),r]}const v=134217729;function T(n,t){const r=n*t,e=v*n,u=e-(e-n),i=n-u,o=v*t,c=o-(o-t),s=t-c;return[i*s-(r-u*c-i*c-u*s),r]}const H=134217729;function V(n,t){const r=n/t,e=r*t,u=H*r,i=u-(u-r),o=r-i,c=H*t,s=c-(c-t),f=t-s,l=(n-e-(o*f-(e-i*s-o*s-i*f)))/t,a=r+l;return[l-(a-r),a]}function Z(n,t){const r=n+t,e=r-n;return[n-(r-e)+(t-e),r]}function C(n,t){const r=(2**(53-t)+1)*n;return r-(r-n)}function Y(n){const t=new ArrayBuffer(8);return new DataView(t).setFloat64(0,n,!1),Array.from(new Uint8Array(t))}function _(n){return Y(n).map(D).join("")}function D(n){let t=n.toString(2);for(;t.length<8;t="0"+t);return t}function U(n){const t=Y(n),r=t[0],e=t[1],u=r>>7,i=((127&r)<<4)+((240&e)>>4),o=0===i?0:16,c=0===i?i-1022:i-1023,s=t.slice(1);return s[0]=(15&e)+o,{sign:u,exponent:c,significand:s}}function $(n){const t=_(n),[,r,e,u]=t.match(/^(.)(.{11})(.{52})$/),i=0===parseInt(e,2)?"0":"1";return{full:r+e+i+u,sign:r,exponent:e,hidden:i,significand:u}}function k(n){return U(n).significand}function z(n){return Math.log2(n&-n)}function G(n){if(0===n||!Number.isFinite(n))return NaN;const t=k(n),r=t.length;for(let n=r-1;n>=0;n--){if(0===t[n])continue;const e=z(t[n]);if(Number.isFinite(e))return 8*(r-n-1)+e}return NaN}function J(n){return n>=128?7:n>=64?6:n>=32?5:n>=16?4:n>=8?3:n>=4?2:n>=2?1:n>=1?0:NaN}function K(n){if(0===n||!Number.isFinite(n))return NaN;const t=k(n),r=t.length;for(let n=0;n<r;n++){const e=J(t[n]);if(Number.isFinite(e))return 8*(r-n-1)+e}return NaN}function Q(n){return U(n).exponent}function R(n,t,r){if(0===n)return!0;const e=Q(n),u=K(n)-52+e;return G(n)-52+e>=r&&u<=t-1+r}function X(n){if(0===n||!Number.isFinite(n))return NaN;const t=Q(n);return K(n)-52+t}function nn(n){if(0===n||!Number.isFinite(n))return NaN;const t=Q(n);return G(n)-52+t}function tn(n){return 0===n?0:K(n)-G(n)+1}const rn=j,en=Number.EPSILON/2,un=en*en;function on(n,t,r,e){const u=n[0],i=n[1],o=t[0],c=t[1],s=rn(n,t),f=Math.abs(u+i),l=Math.abs(o+c),a=l-en*l-e;return a<=0?{est:s,err:Number.POSITIVE_INFINITY}:{est:s,err:(l*r+f*e)/a**2+9*un*Math.abs(f/l)}}const cn=Number.EPSILON/2;function sn(n,t,r,e){const u=n/t,i=Math.abs(n),o=Math.abs(t),c=o-e;return c<=0?{est:u,err:Number.POSITIVE_INFINITY}:{est:u,err:(o*r+i*e)/c**2+cn*Math.abs(i/o)}}function fn(n){return new Array(n+1).join("0")}const{floor:ln,max:an,round:hn,log2:gn,log10:Nn,ceil:bn}=Math,mn=gn(1024)/Nn(1024);function xn(n){let[t,r]=n,e=!1;if(r<0&&(r=-r,t=-t,e=!0),0===r)return"0";const u=an(0,159-ln(gn(r)));if(0===u){const n=(BigInt(hn(t))+BigInt(hn(r))).toString();return e?"-"+n:n}const i=BigInt(u),o=bn(u/mn),c=BigInt(o),s=r*2**u;let f=function(n,t){if(0===t||0===Number(n))return n;const r=-1!==n.indexOf("-"),e=r?"-":"";r&&(n=n.slice(1)),n.startsWith("+")&&(n=n.slice(1));const u=n.indexOf(".");if(t>0){if(-1===u)return e+n+fn(t);const[r,i]=n.split(".");if(i.length<t)return e+r+i+fn(t-i.length);{const n=i.substring(0,t),u=i.substring(t);return e+r+n+(u?"."+u:"")}}t=-t;let i="",o="";if(-1===u?i=n:[i,o]=n.split("."),i.length===t)return e+"0."+i+o;if(i.length>t){const n=i.length-t;return e+i.substring(0,n)+"."+i.substring(n)+o}return e+"0."+(fn(t-i.length)||"0")+i+o}(((BigInt(hn(t*2**u))+BigInt(hn(s)))*10n**c/2n**i).toString(),-o);return f=function(n){if(-1===n.indexOf("."))return n;let t=0,r=0;for(;t<n.length&&"0"===n[n.length-1-t];)r++,t++;return r>0&&(n=n.slice(0,n.length-r)),n.endsWith(".")&&(n=n.slice(0,n.length-1)),n}(f),e?"-"+f:f}function In(n){if(!n.startsWith("0."))return 0;if(0===Number(n))return 0;let t=1;for(let r=0;r<n.length&&"0"===n[r+2];r++)t++;return t}function Mn(n,t,r){const e=n.indexOf(".");let u=t+(-1!==e&&e<t?1:0),i=u;for(r=r||n.length;u<r;)"."!==n[i]?(n=dn(n,i),u++,i++):i++;return n}function dn(n,t){return t>n.length-1?n:n.substring(0,t)+"0"+n.substring(t+1)}function pn(n){n.startsWith("+")&&(n=n.slice(1));let t=n.indexOf(".");-1===t&&(n+=".0"),t=n.indexOf(".");const r=In(n);n.length<46&&(n+=new Array(47-n.length).join("0")),n=n.slice(0,45+(t>=45?0:1)+r),t>=45&&(n+=new Array(t-45+1).join("0"));let e=Mn(n,15+r),u=Mn(n,0,15+r);return u=Mn(u,30+r),{Z:r,seH:e,seL:u,seC:Mn(n,0,30+r)}}const{EPSILON:On}=Number,Fn=On/2+On**2/2;function yn(n){return n>0?n+n*Fn:n-n*Fn}const wn=new Float64Array(13);const{abs:Bn}=Math;function Sn(n){const{str:t,exp:r,negative:e}=function(n){if(0===Number(n))return{str:"0",exp:0,negative:!1};const t=n.startsWith("-");t&&(n=n.slice(1));let r,e=0;({s:n,exp:e}=function(n){const t=n.indexOf("e");let r=0;return-1!==t&&(r=Number(n.slice(t+1)),n=n.slice(0,t)),{s:n,exp:r}}(n));const u=In(n);if(u>0)r=(n=n.slice(u+1))[0]+"."+n.slice(1),e-=u;else{const t=function(n){if(n.startsWith("0."))return 0;if(0===Number(n))return 0;const t=n.indexOf(".");return-1===t?n.length:t}(n);r=(n=n.split("").filter(n=>"."!==n).join(""))[0]+"."+n.slice(1),e=e+t-1}return r=r.slice(0,46),r.length<46&&(r+=new Array(46-r.length).join("0")),{str:r,exp:e,negative:t}}(n);e&&(n=n.slice(1));let{Z:u,seH:i,seL:o,seC:c}=pn(t);const s=yn(Number(i)),f=Mn(s.toFixed(45),0,15+u);let{Z:h,seH:N,seL:b}=pn(f);const m=yn(Number(N)),x=Mn(m.toFixed(45),h,15+h+1);let M=yn(Number(o));const d=function(n){if(0===Number(n))return 0;if(n.startsWith("0."))return 0;let t=0,r=0;for(;r<n.length&&"0"===n[r];r++)t++;return"."===n[r]?0:t}(o);let p=M.toFixed(45);p=Mn(p,15+u-d,30+u+1-d);const O=Number(x),F=Number(p),y=Number(c),w=Number(b),B=a(Z(O,-F),Z(y,-w));let S=a(l(Z(M,-m),s),B);const A=function(n){if(n<23)return[0,10**n];const t=n%23,r=n-t,e=r/23-1;return I(10**t,[wn[e]||(wn[e]=Number(10n**BigInt(r)-BigInt(10**r))),10**r])}(Bn(r));S=0===r?S:r<0?j(S,A):g(S,A);const P=yn(S[1])-S[1];return S[0]=S[0]+P/2-P/2,S=e?S.map(n=>-n):[S[0],S[1]],S}const jn=[12246467991473535e-32,3.141592653589793],An=[14456468917292502e-32,2.718281828459045],Pn=[23190468138463e-30,.6931471805599453],qn=[-4942915152430649e-33,.5772156649015329];function Ln(n,t){return n[1]>t[1]||!(n[1]<t[1])&&n[0]>t[0]}const{trunc:Wn}=Math,En=[0,1],vn=Sn("-0.166666666666666666666666666666666667"),Tn=Sn("0.00833333333333333333333333333333333069"),Hn=Sn("-0.000198412698412698412698412698412671319"),Vn=Sn("2.75573192239858906525573192223995808e-6"),Zn=Sn("-2.50521083854417187750521077962123682e-8"),Cn=Sn("1.60590438368216145993922289621550506e-10"),Yn=Sn("-7.64716373181981647587481187300831335e-13"),_n=Sn("2.81145725434552075980975905006999319e-15"),Dn=Sn("-8.22063524662432650297086257962703293e-18"),Un=Sn("1.95729410633890026175367390152305383e-20"),$n=Sn("-3.86817017051340241224838720319634797e-23"),kn=Sn("6.44695023999222092772271073593727141e-26"),zn=Sn("-9.1836779606017064087088551595474321e-29"),Gn=Sn("1.13078207057779775850779192271873238e-31"),Jn=Sn("1.19290046424220296937971101373203567e-34"),Kn=B(jn,2),Qn=I(2,jn);function Rn(n){let r=n[1]<0;if(r&&(n=[-n[0],-n[1]]),Ln(n,jn)){const r=j(n,Qn);n=t(n,I(Wn(r[1]+r[0]),Qn))}Ln(n,jn)&&(n=t(n,jn),r=!r),Ln(n,Kn)&&(n=t(jn,n));const e=n,u=g(n,n),i=g(e,a(En,g(u,a(vn,g(u,a(Tn,g(u,a(Hn,g(u,a(Vn,g(u,a(Zn,g(u,a(Cn,g(u,a(Yn,g(u,a(_n,g(u,a(Dn,g(u,a(Un,g(u,a($n,g(u,a(kn,g(u,a(zn,g(u,t(Gn,g(u,Jn)))))))))))))))))))))))))))))));return r?[-i[0],-i[1]]:i}const Xn=B(jn,2);function nt(n){return Rn(a(n,Xn))}function tt(n,t){return n[0]===t[0]&&n[1]===t[1]}function rt(n,t){return n[1]>t[1]||!(n[1]<t[1])&&n[0]>=t[0]}function et(n,t){return n[1]<t[1]||!(n[1]>t[1])&&n[0]<t[0]}function ut(n,t){return n[1]<t[1]||!(n[1]>t[1])&&n[0]<=t[0]}function it(n,t){const r=n[0],e=n[1],u=e-t,i=u-e,o=r-r,c=e-(u-i)+(-t-i)+r,s=u+c,f=r-(r-o)-o+(c-(s-u)),l=s+f;return[f-(l-s),l]}export{jn as PIDd,tn as bitLength,f as ddAbs,a as ddAddDd,l as ddAddDouble,m as ddCompare,nt as ddCos,t as ddDiffDd,it as ddDiffDouble,O as ddDivBy2,j as ddDivDd,on as ddDivDdWithError,B as ddDivDouble,tt as ddEq,Ln as ddGt,rt as ddGte,et as ddLt,ut as ddLte,i as ddMax,e as ddMin,d as ddMultBy2,p as ddMultBy4,F as ddMultByNeg2,y as ddMultByNeg4,g as ddMultDd,I as ddMultDouble1,M as ddMultDouble2,A as ddNegativeOf,N as ddProduct,P as ddSign,Rn as ddSin,o as ddSqrt,b as ddSum,xn as ddToStr,sn as divWithErr,V as doubleDivDouble,c as doubleSqrt,_ as doubleToBinaryString,Y as doubleToOctets,An as eDd,qn as eulerDd,Q as exponent,q as fastTwoDiff,L as fastTwoSum,K as getHighestSetBit,G as getLowestSetBit,R as isBitAligned,Pn as ln2Dd,nn as lsbExponent,X as msbExponent,U as parseDouble,$ as parseDoubleDetailed,C as reduceSignificand,k as significand,W as split,s as sqrtWithErr,Sn as strToDd,E as twoDiff,T as twoProduct,Z as twoSum};