|
| 1 | +<!doctype html> |
| 2 | +<html> |
| 3 | +<head> |
| 4 | +<title>JS Math.random() test 02</title> |
| 5 | +<script src="js/cDistribution.js"></script> |
| 6 | +<link rel="stylesheet" href="js/console.css"> |
| 7 | +</head> |
| 8 | +<div id="app"> |
| 9 | + <textarea id="log"></textarea> |
| 10 | +</div> |
| 11 | +<script src="js/console.js"></script> |
| 12 | +<script> |
| 13 | + // go! |
| 14 | + const limit = 100; |
| 15 | + const n = 10; |
| 16 | + const steps = 1000; |
| 17 | + let noCollisionsCnt = 0; |
| 18 | + |
| 19 | + const hasCollision = (s) => { |
| 20 | + const set = new Set(s.split('')); |
| 21 | + return set.size > 2 |
| 22 | + }; |
| 23 | + |
| 24 | + const makeStep = (dist, dist_all) => { |
| 25 | + for (let i = 0; i < n; i++) { |
| 26 | + const v = Math.floor(Math.random() * limit); |
| 27 | + dist.reg(v); |
| 28 | + dist_all.reg(v); |
| 29 | + } |
| 30 | + const stats = dist.map(); |
| 31 | + if (!hasCollision(stats)) { |
| 32 | + noCollisionsCnt += 1; |
| 33 | + } |
| 34 | + // console.log(stats); |
| 35 | + return stats; |
| 36 | + }; |
| 37 | + |
| 38 | + const dist = new cDistribution(limit); |
| 39 | + const dist_all = new cDistribution(limit); |
| 40 | + |
| 41 | + const aa = []; |
| 42 | + for (let step = 0; step < steps; step++) { |
| 43 | + dist.reset(); |
| 44 | + const map = makeStep(dist, dist_all); |
| 45 | + aa.push(`${formatNumber(step, 3)}: ${map}`); |
| 46 | + } |
| 47 | + console.log('dist all:'); |
| 48 | + const stats = dist_all.stats(); |
| 49 | + console.log(stats); |
| 50 | + |
| 51 | + const bb = []; |
| 52 | + bb.push(`noCollisions: ${noCollisionsCnt}/${steps}`); |
| 53 | + console.log(`noCollisions: ${noCollisionsCnt}/${steps}`); |
| 54 | + const k = 0.99*0.98*0.97*0.96*0.95*0.94*0.93*0.92*0.91; |
| 55 | + const noCollisionsTheory = Math.round(k * 1000); |
| 56 | + bb.push(`in Theory: ${noCollisionsTheory}/${steps}`); |
| 57 | + console.log(`in Theory: ${noCollisionsTheory}/${steps}`); |
| 58 | + bb.push('---'); |
| 59 | + |
| 60 | + putlines(bb.concat(aa)); |
| 61 | + |
| 62 | +</script> |
| 63 | +</html> |
0 commit comments