JSFiddle - React, Tailwind, and code Playground
by Timatnet
HTML
<html>
<head>
<script type="text/javascript"
src="http://dygraphs.com/dygraph-combined.js"></script>
<script type="text/javascript"
src="https://raw.github.com/Ivajkin/common.js/master/common.js"></script>
</head>
<body>
<div id="graphdiv"
style="width:500px; height:300px;"></div>
</body>
</html>
JavaScript
/*function assert(expression) {
if(!expression) throw "Assert failed!";
}
var cos = Math.cos,
sin = Math.sin,
π = Math.PI,
random = Math.random,
sqrt = Math.sqrt,
ln = Math.log;*/
/*Array.prototype.fold = function(sum, f) {
for(var i = 0; i < this.length; ++i) {
sum = f(sum, this[i]);
}
return sum;
};
var sum = function(sum, x) {return sum + x;};
function generate(N, f) {
var _ = [];
for(var i = 0; i < N; ++i) {
_.push(f(i));
}
return _;
}*/
assert(6 === [1, 2, 3].fold(0, sum));
assert("123" === ["1", "2", "3"].fold("", sum));
var Normal = {
CLT: function(N) {
assert(N < 100);
return generate(N, random).fold(0, sum)/N;
},
Muller: function() {
if(this._MullerVal === null) {
var φ = random(),
r = random();
var x = sqrt(-2*ln(r));
this._MullerVal = sin(2*π*φ)*x;
return cos(2*π*φ)*x;
} else {
var val = this._MullerVal;
this._MullerVal = null;
return val;
}
},
_MullerVal: null
};
var values = [],
size = 50;
for(var i = 0; i < size; ++i) {values[i] = 0;}
var iterationCount = 1000000;
for(var i = 0; i < iterationCount; ++i) {
++values[Math.round(Normal.CLT(10) * size)];
}
var data = "Value,P\n";
for(var i = 0; i < size; ++i) {
data += (i/size) + "," + (values[i]/iterationCount) + "\n";
}
g = new Dygraph(
// containing div
document.getElementById("graphdiv"),
data
);