1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
'use strict'; const p = console.log; const probabilityNPercent = (n) => { const random100 = Math.random() * 100.0; return random100 < n; }; const n回中1回以上成功した = (percent, n) => { for (let i = 0; i < n; i++) { if (probabilityNPercent(percent)) { return true; } } return false; }; const n回を1timesとしてn回中1回以上成功した割合100 = (percent, n, times) => { let cnt = 0; for (let i = 0; i < times; i++) { if (n回中1回以上成功した(percent, n)) { cnt++; } } return (cnt * 100.0) / times; }; const n回を1timesとしてn回中1回以上成功した割合100解析解 = (percent, n, times) => { return 100 * (1.0 - Math.pow(1.0 - 0.01 * percent, n)); }; const main = () => { const percent = 7; const n = 27; const times = 10000; const proportion = n回を1timesとしてn回中1回以上成功した割合100(percent, n, times); const analytic = n回を1timesとしてn回中1回以上成功した割合100解析解(percent, n, times); p(proportion); p(analytic); }; main(); |
1 2 |
86.36 85.90582657870823 |