@lazy-random/df-algorithm
Version:
51 lines (50 loc) • 2.17 kB
JavaScript
!function(e, t) {
"object" == typeof exports && "undefined" != typeof module ? t(exports, require("@lazy-random/expect"), require("num-is-zero")) : "function" == typeof define && define.amd ? define([ "exports", "@lazy-random/expect", "num-is-zero" ], t) : t((e = "undefined" != typeof globalThis ? globalThis : e || self).LazyRandomDfAlgorithm = {}, e.expect, e.numIsZero);
}(this, (function(e, t, n) {
"use strict";
function dfIrwinHall(e, r = 1) {
return t.expect(r).integer.gte(0), 0 === (r = n.fixZero(r)) ? () => 0 : () => {
let t = r, n = 0;
for (;t--; ) n += e.next();
return n;
};
}
function dfNormal(e, n = 0, r = 1) {
return t.expect(n).number(), t.expect(r).number(), () => {
let t, o, f;
do {
t = 2 * e.next() - 1, o = 2 * e.next() - 1, f = t * t + o * o;
} while (!f || f > 1);
return n + r * o * Math.sqrt(-2 * Math.log(f) / f);
};
}
e.dfBates = function dfBates(e, n = 1) {
t.expect(n).integer.gt(0);
const r = dfIrwinHall(e, n);
return () => r() / n;
}, e.dfBernoulli = function dfBernoulli(e, n = .5) {
return t.expect(n).number.gte(0).lte(1), () => Math.floor(e.next() + n);
}, e.dfBinomial = function dfBinomial(e, n = 1, r = .5) {
return t.expect(n).integer.gt(0), t.expect(r).number.gte(0).lte(1), () => {
let t = n, o = 0;
for (;t--; ) e.next() < r && o++;
return o;
};
}, e.dfExponential = function dfExponential(e, n = 1) {
return t.expect(n).number.gt(0), () => -Math.log(1 - e.next()) / n;
}, e.dfGeometric = function dfGeometric(e, n = .5) {
t.expect(n).number.gt(0).lte(1);
const r = 1.0 / Math.log(1.0 - n);
return () => Math.floor(1 + Math.log(e.next()) * r);
}, e.dfIrwinHall = dfIrwinHall, e.dfLogNormal = function dfLogNormal(...e) {
const t = dfNormal(...e);
return () => Math.exp(t());
}, e.dfNormal = dfNormal, e.dfPareto = function dfPareto(e, n = 1) {
t.expect(n).gt(0);
const r = 1.0 / n;
return () => 1.0 / Math.pow(1.0 - e.next(), r);
}, Object.defineProperty(e, "__esModule", {
value: !0
});
}));
//# sourceMappingURL=index.umd.production.min.cjs.map