UNPKG

@rickosborne/rebound

Version:

Rick Osborne's utilities for working with bounded numbers

34 lines (33 loc) 1.28 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); import { randomNumberGenerator } from "@rickosborne/foundation"; import { addTypedProperties } from "./typed-function.mjs"; const randomBounded = /* @__PURE__ */ __name((typeName, label, isLowerInc, lower, isInt, upper, isUpperInc, rng = randomNumberGenerator(), fnName = `random${typeName}`) => { if (!Number.isFinite(upper) || !Number.isFinite(lower)) { throw new RangeError(`${typeName}: Unbounded random`); } const high = upper + (isUpperInc ? isInt ? 1 : Number.MIN_VALUE : 0); let low = lower + (isLowerInc ? 0 : isInt ? 1 : Number.MIN_VALUE); const range = high - low; const minRange = isInt ? 2 : 2 * Number.MIN_VALUE; let fn; if (range < minRange) { throw new RangeError(`${typeName}: Random range too narrow`); } else if (isInt) { fn = /* @__PURE__ */ __name(() => rng.range(low, high), "fn"); } else { fn = /* @__PURE__ */ __name(() => rng.float01() * range + low, "fn"); } return addTypedProperties(fn, { label, upper, lower, isUpperInc, isLowerInc, isInt }, typeName, fnName); }, "randomBounded"); export { randomBounded }; //# sourceMappingURL=random-bounded.mjs.map