precise-fractions
Version:
Allows for working with fractions.
2 lines (1 loc) • 2.05 kB
JavaScript
function u(t,n){for(;n!==0n;){let r=n;n=t%n,t=r}return t}function s(t,n){return t/u(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=u(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=c(this,...n);this.numerator=r.numerator,this.denominator=r.denominator}subtract(n){n instanceof t||(n=new t(n));let r=g(this,n);this.numerator=r.numerator,this.denominator=r.denominator}multiply(...n){let r=b(this,...n);this.numerator=r.numerator,this.denominator=r.denominator}divide(n){n instanceof t||(n=new t(n));let r=d(this,n);this.numerator=r.numerator,this.denominator=r.denominator}power(n){let r=F(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 e(t){return t instanceof i?t:new i(t)}function l(t,n){return new i(t,n)}function c(...t){if(t.length===1)return e(t[0]);let n=h(t[0],t[1]);for(let r=2;r<t.length;r++)n=h(n,t[r]);return n}function h(t,n){t=e(t),n=e(n);let r=s(t.denominator,n.denominator),o=r/t.denominator,a=r/n.denominator,m=o*t.numerator+a*n.numerator;return new i(m,r)}function g(t,n){t=e(t),n=e(n);let r=s(t.denominator,n.denominator),o=r/t.denominator,a=r/n.denominator,m=o*t.numerator-a*n.numerator;return new i(m,r)}function b(...t){let n=1n,r=1n;for(let o=0;o<t.length;o++){let a=e(t[o]);n*=a.numerator,r*=a.denominator}return new i(n,r)}function d(t,n){return t=e(t),n=e(n),new i(t.numerator*n.denominator,t.denominator*n.numerator)}function F(t,n){return t=e(t),n=BigInt(n),new i(t.numerator**n,t.denominator**n)}export{i as Fraction,c as add,l as createFraction,d as divide,b as multiply,F as power,g as subtract};