UNPKG

@numio/bigmath

Version:

@numio/bigmath is an arbitrary-precision arithmetic library. It can be used for basic operations with decimal numbers (integers and float)

79 lines (78 loc) 4.29 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _Pipe_result; import { bi2s, calcInner, s2bi } from "../shared/utils.js"; import { divInner } from "../operations/div/utils.js"; import { absInner } from "../abs/utils.js"; import { modInner } from "../mod/utils.js"; /** Using this function you can chain operations (add, sub, div, mul). */ export class Pipe { constructor(value) { _Pipe_result.set(this, void 0); value && (__classPrivateFieldSet(this, _Pipe_result, s2bi(value), "f")); } add(array) { const arrayInner = array.map((str) => s2bi(str)); __classPrivateFieldSet(this, _Pipe_result, calcInner(arrayInner, (a, b) => a + b, __classPrivateFieldGet(this, _Pipe_result, "f")), "f"); return this; } sub(array) { const arrayInner = array.map((str) => s2bi(str)); __classPrivateFieldSet(this, _Pipe_result, calcInner(arrayInner, (a, b) => a - b, __classPrivateFieldGet(this, _Pipe_result, "f")), "f"); return this; } div(array, precision = 20) { const arrayInner = array.map((str) => s2bi(str)); __classPrivateFieldSet(this, _Pipe_result, divInner(arrayInner, precision, __classPrivateFieldGet(this, _Pipe_result, "f")), "f"); return this; } mul(array) { const arrayInner = array.map((str) => s2bi(str)); __classPrivateFieldSet(this, _Pipe_result, calcInner(arrayInner, (a, b) => a * b, __classPrivateFieldGet(this, _Pipe_result, "f")), "f"); return this; } abs() { if (!__classPrivateFieldGet(this, _Pipe_result, "f")) { throw new Error("Cannot calculate the absolute value of an undefined."); } __classPrivateFieldSet(this, _Pipe_result, absInner(__classPrivateFieldGet(this, _Pipe_result, "f")), "f"); return this; } mod(value) { const right = s2bi(value); if (!__classPrivateFieldGet(this, _Pipe_result, "f")) throw new Error("Value is undefined."); if (__classPrivateFieldGet(this, _Pipe_result, "f")[1] > 0) throw new Error(`${bi2s(__classPrivateFieldGet(this, _Pipe_result, "f"))} is not valid. It should be integer to take a modulo.`); if (right[1] > 0) throw new Error(`${value} is not valid. It should be integer to take a modulo.`); __classPrivateFieldSet(this, _Pipe_result, modInner(__classPrivateFieldGet(this, _Pipe_result, "f"), s2bi(value)), "f"); return this; } calc() { if (!__classPrivateFieldGet(this, _Pipe_result, "f")) { throw new Error("Cannot calculate based on an undefined input."); } return bi2s(__classPrivateFieldGet(this, _Pipe_result, "f")); } resultToBase(radix) { var _a; if (!__classPrivateFieldGet(this, _Pipe_result, "f")) { throw new Error(`Cannot convert an undefined result to base ${radix}.`); } if (__classPrivateFieldGet(this, _Pipe_result, "f")[1] > 0) { throw new Error(`Cannot convert non integer result to base ${radix}.`); } return (_a = __classPrivateFieldGet(this, _Pipe_result, "f")) === null || _a === void 0 ? void 0 : _a[0].toString(radix); } } _Pipe_result = new WeakMap();