UNPKG

d3-random

Version:

Generate random numbers from various distributions.

28 lines (23 loc) 726 B
import defaultSource from "./defaultSource.js"; import binomial from "./binomial.js"; import gamma from "./gamma.js"; export default (function sourceRandomPoisson(source) { var G = gamma.source(source), B = binomial.source(source); function randomPoisson(lambda) { return function() { var acc = 0, l = lambda; while (l > 16) { var n = Math.floor(0.875 * l), t = G(n)(); if (t > l) return acc + B(n - 1, l / t)(); acc += n; l -= t; } for (var s = -Math.log1p(-source()), k = 0; s <= l; ++k) s -= Math.log1p(-source()); return acc + k; }; } randomPoisson.source = sourceRandomPoisson; return randomPoisson; })(defaultSource);