source: node_modules/d3-random/src/binomial.js@ a762898

Last change on this file since a762898 was e4c61dd, checked in by istevanoska <ilinastevanoska@…>, 6 months ago

Prototype 1.1

  • Property mode set to 100644
File size: 1013 bytes
Line 
1import defaultSource from "./defaultSource.js";
2import beta from "./beta.js";
3import geometric from "./geometric.js";
4
5export default (function sourceRandomBinomial(source) {
6 var G = geometric.source(source),
7 B = beta.source(source);
8
9 function randomBinomial(n, p) {
10 n = +n;
11 if ((p = +p) >= 1) return () => n;
12 if (p <= 0) return () => 0;
13 return function() {
14 var acc = 0, nn = n, pp = p;
15 while (nn * pp > 16 && nn * (1 - pp) > 16) {
16 var i = Math.floor((nn + 1) * pp),
17 y = B(i, nn - i + 1)();
18 if (y <= pp) {
19 acc += i;
20 nn -= i;
21 pp = (pp - y) / (1 - y);
22 } else {
23 nn = i - 1;
24 pp /= y;
25 }
26 }
27 var sign = pp < 0.5,
28 pFinal = sign ? pp : 1 - pp,
29 g = G(pFinal);
30 for (var s = g(), k = 0; s <= nn; ++k) s += g();
31 return acc + (sign ? k : nn - k);
32 };
33 }
34
35 randomBinomial.source = sourceRandomBinomial;
36
37 return randomBinomial;
38})(defaultSource);
Note: See TracBrowser for help on using the repository browser.