UNPKG

@rickosborne/rebound

Version:

Rick Osborne's utilities for working with bounded numbers

53 lines (52 loc) 2.22 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var random_bounded_exports = {}; __export(random_bounded_exports, { randomBounded: () => randomBounded }); module.exports = __toCommonJS(random_bounded_exports); var import_foundation = require("@rickosborne/foundation"); var import_typed_function = require("./typed-function.cjs"); const randomBounded = /* @__PURE__ */ __name((typeName, label, isLowerInc, lower, isInt, upper, isUpperInc, rng = (0, import_foundation.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 (0, import_typed_function.addTypedProperties)(fn, { label, upper, lower, isUpperInc, isLowerInc, isInt }, typeName, fnName); }, "randomBounded"); //# sourceMappingURL=random-bounded.cjs.map