@tempots/std
Version:
Std library for TypeScript. Natural complement to the Tempo libraries.
56 lines (55 loc) • 1.7 kB
JavaScript
import { ArgumentError as t } from "./error.js";
const c = (n, e) => (e < 0n && (n = -n, e = -e), n <= 0n ? n / e : (n - 1n) / e + 1n), f = (n, e) => (e < 0n && (n = -n, e = -e), n >= 0n ? n / e : (n + 1n) / e - 1n), u = (n, e) => n < e ? -1 : n > e ? 1 : 0, r = (n) => n < 0n ? -n : n, l = (n, e) => n < e ? n : e, m = (n, e) => n > e ? n : e, w = (n, e) => {
if (e < 0n)
throw new t("negative exponent for parameter y of biPow");
let i = 1n;
for (; e > 0n; )
(e & 1n) !== 0n && (i *= n), e >>= 1n, n *= n;
return i;
}, s = (n, e) => {
for (n = r(n), e = r(e); e > 0n; ) {
const i = e;
e = n % e, n = i;
}
return n;
}, a = (n, e) => r(n * e) / s(n, e), o = (n) => {
if (n < 2n) return !1;
if (n === 2n || n === 3n) return !0;
if (n % 2n === 0n || n % 3n === 0n) return !1;
let e = 5n;
for (; e * e <= n; ) {
if (n % e === 0n || n % (e + 2n) === 0n) return !1;
e += 6n;
}
return !0;
}, v = (n) => {
if (n < 2n) return 2n;
if (n === 2n) return 3n;
for (n % 2n === 0n ? n++ : n += 2n; !o(n); ) n += 2n;
return n;
}, P = (n) => {
if (n <= 2n) throw new t(`no previous prime ${n} for biPrevPrime`);
if (n === 3n) return 2n;
for (n % 2n === 0n ? n-- : n -= 2n; !o(n); ) n -= 2n;
return n;
}, h = (n) => n % 2n === 0n, p = (n) => n % 2n !== 0n, I = (n) => n === 0n, d = (n) => n === 1n, g = (n) => n < 0n, A = (n) => n > 0n;
export {
r as biAbs,
c as biCeilDiv,
u as biCompare,
f as biFloorDiv,
s as biGcd,
h as biIsEven,
g as biIsNegative,
p as biIsOdd,
d as biIsOne,
A as biIsPositive,
o as biIsPrime,
I as biIsZero,
a as biLcm,
m as biMax,
l as biMin,
v as biNextPrime,
w as biPow,
P as biPrevPrime
};