UNPKG

extra-number

Version:

A number is a mathematical object used to count, measure, and label.

418 lines (413 loc) 13.5 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _build = {}; Object.defineProperty(_build, "__esModule", { value: true }); exports.mean = _build.mean = exports.arithmeticMean = _build.arithmeticMean = exports.variance = _build.variance = exports.range = _build.range = exports.modes = _build.modes = exports.median = _build.median = exports.product = _build.product = exports.sum = _build.sum = exports.radians = _build.radians = exports.degrees = _build.degrees = exports.multinomial = _build.multinomial = exports.binomial = _build.binomial = exports.factorial = _build.factorial = exports.lcm = _build.lcm = exports.hcf = _build.hcf = exports.gcd = _build.gcd = exports.isPrime = _build.isPrime = exports.primeExponentials = _build.primeExponentials = exports.primeFactors = _build.primeFactors = exports.greatestPrimeFactor = _build.greatestPrimeFactor = exports.maxPrimeFactor = _build.maxPrimeFactor = exports.leastPrimeFactor = _build.leastPrimeFactor = exports.minPrimeFactor = _build.minPrimeFactor = exports.aliquotSum = _build.aliquotSum = exports.aliquotParts = _build.aliquotParts = exports.properDivisors = _build.properDivisors = exports.log = _build.log = exports.root = _build.root = exports.nextPow = _build.nextPow = exports.prevPow = _build.prevPow = exports.isPow = _build.isPow = exports.lerp = _build.lerp = exports.map = _build.map = exports.remap = _build.remap = exports.norm = _build.norm = exports.normalize = _build.normalize = exports.clamp = _build.clamp = exports.constrain = _build.constrain = exports.modp = _build.modp = exports.mod = _build.mod = exports.rem = _build.rem = exports.roundDiv = _build.roundDiv = exports.ceilDiv = _build.ceilDiv = exports.floorDiv = _build.floorDiv = exports.round = _build.round = exports.ceil = _build.ceil = exports.floor = _build.floor = exports.compare = _build.compare = exports.significantDigits = _build.significantDigits = exports.is = _build.is = void 0; exports.toRoman = _build.toRoman = exports.toRomanNumerals = _build.toRomanNumerals = exports.fromRoman = _build.fromRoman = exports.fromRomanNumerals = _build.fromRomanNumerals = exports.cubicMean = _build.cubicMean = exports.rootMeanSquare = _build.rootMeanSquare = exports.quadriaticMean = _build.quadriaticMean = exports.harmonicMean = _build.harmonicMean = exports.geometricMean = _build.geometricMean = void 0; function is(v) { return typeof v === "number"; } exports.is = _build.is = is; function significantDigits(x) { var a = x.toExponential(); return a.replace(/e[\+\-0-9]*$/, "").replace(/^0\.?0*|\./, "").length; } exports.significantDigits = _build.significantDigits = significantDigits; function compare(x, y) { return x - y; } exports.compare = _build.compare = compare; function floor(x, pre = 1) { return Math.floor(x / pre) * pre; } exports.floor = _build.floor = floor; function ceil(x, pre = 1) { return Math.ceil(x / pre) * pre; } exports.ceil = _build.ceil = ceil; function round(x, pre = 1) { return Math.round(x / pre) * pre; } exports.round = _build.round = round; function floorDiv(x, y) { return Math.floor(x / y); } exports.floorDiv = _build.floorDiv = floorDiv; function ceilDiv(x, y) { return Math.ceil(x / y); } exports.ceilDiv = _build.ceilDiv = ceilDiv; function roundDiv(x, y) { return Math.round(x / y); } exports.roundDiv = _build.roundDiv = roundDiv; function rem(x, y) { return x % y; } exports.rem = _build.rem = rem; function mod(x, y) { return x - y * Math.floor(x / y); } exports.mod = _build.mod = mod; function modp(x, y) { return x - Math.abs(y) * Math.floor(x / Math.abs(y)); } exports.modp = _build.modp = modp; function constrain(x, min, max) { return Math.min(Math.max(x, min), max); } exports.constrain = _build.constrain = constrain; exports.clamp = _build.clamp = constrain; function normalize(x, r, R) { return (x - r) / (R - r); } exports.normalize = _build.normalize = normalize; exports.norm = _build.norm = normalize; function remap(x, r, R, t, T) { return t + ((x - r) / (R - r)) * (T - t); } exports.remap = _build.remap = remap; exports.map = _build.map = remap; function lerp(x, y, t) { return x + t * (y - x); } exports.lerp = _build.lerp = lerp; function isPow(x, n) { if (n === 0) return x === 0; var p = log(Math.abs(x), Math.abs(n)); if (p !== Math.floor(p)) return false; return x < 0 ? n < 0 && (p & 1) === 1 : n > 0 || (p & 1) === 0; } exports.isPow = _build.isPow = isPow; function prevPow(x, n) { if (x <= 1) return 0; var p = Math.floor(Math.log(x) / Math.log(n)); return Math.pow(n, p); } exports.prevPow = _build.prevPow = prevPow; function nextPow(x, n) { if (x <= 0) return 1; var p = Math.ceil(Math.log(x) / Math.log(n)); return Math.pow(n, p); } exports.nextPow = _build.nextPow = nextPow; function root(x, n) { if ((n & 1) === 0) return Math.pow(x, 1 / n); return Math.sign(x) * Math.pow(Math.abs(x), 1 / n); } exports.root = _build.root = root; function log(x, b = Math.E) { return Math.log(x) / Math.log(b); } exports.log = _build.log = log; function properDivisors(x) { var x = Math.abs(x), a = []; for (var i = 1; i < x; i++) if (x % i === 0) a.push(i); return a; } exports.properDivisors = _build.properDivisors = properDivisors; exports.aliquotParts = _build.aliquotParts = properDivisors; function aliquotSum(x) { var x = Math.abs(x), a = 0; for (var i = 0; i < x; i++) if (x % i === 0) a += i; return a; } exports.aliquotSum = _build.aliquotSum = aliquotSum; function minPrimeFactor(x) { var x = Math.abs(x); if (x <= 1) return 0; if (x <= 3) return x; if (x % 2 === 0) return 2; if (x % 3 === 0) return 3; for (var i = 6, I = Math.sqrt(x) + 1; i <= I; i += 6) { if (x % (i - 1) === 0) return i - 1; if (x % (i + 1) === 0) return i + 1; } return x; } exports.minPrimeFactor = _build.minPrimeFactor = minPrimeFactor; exports.leastPrimeFactor = _build.leastPrimeFactor = minPrimeFactor; function maxPrimeFactor(x) { var x = Math.abs(x), a = 0; if (x <= 1) return 0; if (x <= 3) return x; for (; x % 2 === 0; a = 2) x /= 2; for (; x % 3 === 0; a = 3) x /= 3; for (var i = 6, I = Math.sqrt(x) + 1; x > 1 && i <= I; i += 6) { for (; x % (i - 1) == 0; a = i - 1) x /= i - 1; for (; x % (i + 1) == 0; a = i + 1) x /= i + 1; } if (x <= 1) return a; return x; } exports.maxPrimeFactor = _build.maxPrimeFactor = maxPrimeFactor; exports.greatestPrimeFactor = _build.greatestPrimeFactor = maxPrimeFactor; function primeFactors(x) { var x = Math.abs(x), a = []; if (x <= 1) return []; if (x <= 3) return [x]; x = pushPrimeFactorTo$(a, x, 2); x = pushPrimeFactorTo$(a, x, 3); for (var i = 6, I = Math.sqrt(x) + 1; x > 1 && i <= I; i += 6) { x = pushPrimeFactorTo$(a, x, i - 1); x = pushPrimeFactorTo$(a, x, i + 1); } if (x > 1) a.push(x); return a; } exports.primeFactors = _build.primeFactors = primeFactors; function pushPrimeFactorTo$(a, x, f) { if (x % f !== 0) return x; do { x /= f; } while (x % f === 0); a.push(f); return x; } function primeExponentials(x) { var x = Math.abs(x), a = []; if (x <= 1) return []; if (x <= 3) return [[x, 1]]; x = pushPrimeExponentialTo$(a, x, 2); x = pushPrimeExponentialTo$(a, x, 3); for (var i = 6, I = Math.sqrt(x) + 1; x > 1 && i <= I; i += 6) { x = pushPrimeExponentialTo$(a, x, i - 1); x = pushPrimeExponentialTo$(a, x, i + 1); } if (x > 1) a.push([x, 1]); return a; } exports.primeExponentials = _build.primeExponentials = primeExponentials; function pushPrimeExponentialTo$(a, x, f) { if (x % f !== 0) return x; var e = 0; do { x /= f; ++e; } while (x % f === 0); a.push([f, e]); return x; } function isPrime(x) { return x !== 0 && minPrimeFactor(x) === Math.abs(x); } exports.isPrime = _build.isPrime = isPrime; function gcd(...xs) { var a = xs[0] || 1; for (var i = 1, I = xs.length; i < I; i++) a = gcdPair(a, xs[i]); return a; } exports.gcd = _build.gcd = gcd; exports.hcf = _build.hcf = gcd; function gcdPair(x, y) { while (y !== 0) { var t = y; y = x % y; x = t; } return x; } function lcm(...xs) { var a = xs[0] || 1; for (var i = 1, I = xs.length; i < I; i++) a = a * xs[i] / gcdPair(a, xs[i]); return a; } exports.lcm = _build.lcm = lcm; function factorial(n, k = 0) { if (n < 0) return 0; for (var i = k + 1, a = 1; i <= n; i++) a *= i; return a; } exports.factorial = _build.factorial = factorial; function binomial(n, k) { if (k < 0 || k > Math.abs(n)) return 0; if (n < 0) return Math.pow(-1, k) * binomial(-n, k); k = k > n - k ? n - k : k; for (var a = 1, i = 1; i <= k; i++, n--) a *= n / i; return a; } exports.binomial = _build.binomial = binomial; function multinomial(...ks) { var n = sum(...ks), a = 1; for (var i = 0, j = 0, I = ks.length; i < I;) { if (j <= 0) j = ks[i++]; else a *= n-- / j--; } return a; } exports.multinomial = _build.multinomial = multinomial; function degrees(x) { return x * (180 / Math.PI); } exports.degrees = _build.degrees = degrees; function radians(x) { return x * (Math.PI / 180); } exports.radians = _build.radians = radians; function sum(...xs) { var a = 0; for (var x of xs) a += x; return a; } exports.sum = _build.sum = sum; function product(...xs) { var a = 1; for (var x of xs) a *= x; return a; } exports.product = _build.product = product; function median(...xs) { if (xs.length === 0) return 0; xs.sort((a, b) => a - b); var i = xs.length >> 1; if ((xs.length & 1) === 1) return xs[i]; return (xs[i - 1] + xs[i]) / 2; } exports.median = _build.median = median; function modes(...xs) { xs.sort((a, b) => a - b); var r = maxRepeat(xs); return getRepeats(xs, r); } exports.modes = _build.modes = modes; function maxRepeat(xs) { var count = Math.min(xs.length, 1), max = count; for (var i = 1, I = xs.length; i < I; i++) { if (xs[i - 1] === xs[i]) count++; else { max = Math.max(max, count); count = 1; } } return Math.max(max, count); } function getRepeats(xs, r) { var a = []; r--; for (var i = 0, I = xs.length - r; i < I; i++) if (xs[i] === xs[i + r]) a.push(xs[i += r]); return a; } function range(...xs) { return [Math.min(...xs), Math.max(...xs)]; } exports.range = _build.range = range; function variance(...xs) { if (xs.length === 0) return 0; var m = arithmeticMean(...xs), a = 0; for (var x of xs) a += (x - m) ** 2; return a / xs.length; } exports.variance = _build.variance = variance; function arithmeticMean(...xs) { if (xs.length === 0) return 0; return sum(...xs) / xs.length; } exports.arithmeticMean = _build.arithmeticMean = arithmeticMean; exports.mean = _build.mean = arithmeticMean; function geometricMean(...xs) { var n = xs.length; return root(product(...xs), n); } exports.geometricMean = _build.geometricMean = geometricMean; function harmonicMean(...xs) { var n = xs.length; var p = product(...xs), q = 0; for (var x of xs) q += p / x; return n * p / q; } exports.harmonicMean = _build.harmonicMean = harmonicMean; function quadriaticMean(...xs) { var n = xs.length, a = 0; for (var x of xs) a += x * x; return Math.sqrt(a / n); } exports.quadriaticMean = _build.quadriaticMean = quadriaticMean; exports.rootMeanSquare = _build.rootMeanSquare = quadriaticMean; function cubicMean(...xs) { var n = xs.length, a = 0; for (var x of xs) a += x ** 3; return Math.cbrt(a / n); } exports.cubicMean = _build.cubicMean = cubicMean; const ROMAN_SYMBOLS = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L', 'XC', 'C', 'CD', 'D', 'CM', 'M']; const ROMAN_VALUES = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000]; function fromRomanNumerals(txt) { var s = ROMAN_SYMBOLS.length - 1; var n = txt.search(/^\s*-/) >= 0, a = 0; var txt = txt.replace(/\W/g, '').toUpperCase(); for (var i = 0, I = txt.length; i < I; i += ROMAN_SYMBOLS[s].length) { while (s >= 0 && txt.substring(i, i + ROMAN_SYMBOLS[s].length) !== ROMAN_SYMBOLS[s]) --s; if (s < 0) break; a += ROMAN_VALUES[s]; } return n ? -a : a; } exports.fromRomanNumerals = _build.fromRomanNumerals = fromRomanNumerals; exports.fromRoman = _build.fromRoman = fromRomanNumerals; function toRomanNumerals(x) { var a = x < 0 ? '-' : ''; var x = Math.abs(x); for (var s = ROMAN_SYMBOLS.length - 1; s >= 0; --s) while (x >= ROMAN_VALUES[s]) { x -= ROMAN_VALUES[s]; a += ROMAN_SYMBOLS[s]; } return a; } exports.toRomanNumerals = _build.toRomanNumerals = toRomanNumerals; exports.toRoman = _build.toRoman = toRomanNumerals; exports.default = _build;