@rickosborne/rebound
Version:
Rick Osborne's utilities for working with bounded numbers
34 lines (33 loc) • 1.28 kB
JavaScript
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