precise-fractions
Version:
Allows for working with fractions.
2 lines (1 loc) • 2.59 kB
JavaScript
;var d=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var x=(t,n)=>{for(var r in n)d(t,r,{get:n[r],enumerable:!0})},I=(t,n,r,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of y(n))!v.call(t,e)&&e!==r&&d(t,e,{get:()=>n[e],enumerable:!(o=p(n,e))||o.enumerable});return t};var A=t=>I(d({},"__esModule",{value:!0}),t);var N={};x(N,{Fraction:()=>i,add:()=>m,createFraction:()=>w,divide:()=>c,multiply:()=>s,power:()=>g,subtract:()=>u});module.exports=A(N);function F(t,n){for(;n!==0n;){let r=n;n=t%n,t=r}return t}function h(t,n){return t/F(t,n)*n}var i=class t{numerator;denominator;constructor(n,r){typeof n!="bigint"&&(n=BigInt(n)),typeof r!="bigint"&&(r=BigInt(r||1));let o=F(n,r);this.numerator=n/o,this.denominator=r/o}valueOf(){return Number(this.numerator)/Number(this.denominator)}toString(){return`${this.numerator} / ${this.denominator}`}add(...n){let r=m(this,...n);this.numerator=r.numerator,this.denominator=r.denominator}subtract(n){n instanceof t||(n=new t(n));let r=u(this,n);this.numerator=r.numerator,this.denominator=r.denominator}multiply(...n){let r=s(this,...n);this.numerator=r.numerator,this.denominator=r.denominator}divide(n){n instanceof t||(n=new t(n));let r=c(this,n);this.numerator=r.numerator,this.denominator=r.denominator}power(n){let r=g(this,n);this.numerator=r.numerator,this.denominator=r.denominator}equals(n){n instanceof t?n=n.shorten(!0):n=new t(n);let r=this.shorten(!0);return r.numerator===n.numerator&&r.denominator===n.denominator}shorten(n){let r=new t(this.numerator,this.denominator);if(n)return r;this.numerator=r.numerator,this.denominator=r.denominator}};function a(t){return t instanceof i?t:new i(t)}function w(t,n){return new i(t,n)}function m(...t){if(t.length===1)return a(t[0]);let n=l(t[0],t[1]);for(let r=2;r<t.length;r++)n=l(n,t[r]);return n}function l(t,n){t=a(t),n=a(n);let r=h(t.denominator,n.denominator),o=r/t.denominator,e=r/n.denominator,b=o*t.numerator+e*n.numerator;return new i(b,r)}function u(t,n){t=a(t),n=a(n);let r=h(t.denominator,n.denominator),o=r/t.denominator,e=r/n.denominator,b=o*t.numerator-e*n.numerator;return new i(b,r)}function s(...t){let n=1n,r=1n;for(let o=0;o<t.length;o++){let e=a(t[o]);n*=e.numerator,r*=e.denominator}return new i(n,r)}function c(t,n){return t=a(t),n=a(n),new i(t.numerator*n.denominator,t.denominator*n.numerator)}function g(t,n){return t=a(t),n=BigInt(n),new i(t.numerator**n,t.denominator**n)}0&&(module.exports={Fraction,add,createFraction,divide,multiply,power,subtract});