18 lines
489 B
JavaScript
18 lines
489 B
JavaScript
import defaultSource from "./defaultSource.js";
|
|
|
|
export default (function sourceRandomGeometric(source) {
|
|
function randomGeometric(p) {
|
|
if ((p = +p) < 0 || p > 1) throw new RangeError("invalid p");
|
|
if (p === 0) return () => Infinity;
|
|
if (p === 1) return () => 1;
|
|
p = Math.log1p(-p);
|
|
return function() {
|
|
return 1 + Math.floor(Math.log1p(-source()) / p);
|
|
};
|
|
}
|
|
|
|
randomGeometric.source = sourceRandomGeometric;
|
|
|
|
return randomGeometric;
|
|
})(defaultSource);
|