@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
JavaScript
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();