Monte Carlo Pi Estimation

by Santiago J

HTML

<pre id="output"></pre>

JavaScript

function estPi(N) {
    var p = 0;
    for (var i = 0; i < N; i++) {
        var x = Math.random();
        var y = Math.random();
        if (x*x + y*y <= 1) p++;
    }
    return 4 * p / N;
}

function estPiUniform(N) {
    var p = 0;
    var M = (N-1)*(N-1);
    for (var x = 0; x < N; x++) {
        for (var y = 0; y < N; y++) {
            if (x*x + y*y <= M) p++;
        }
    }
    return 4 * p / (N*N);
}

function log(str) {
    if (console) console.log(str);
    var el = document.querySelector("#output");
    if (el) el.textContent += "\n" + str;
}

function time(fn, args) {
    var t1 = Date.now();
    var ret = fn.apply(null, args);
    var t2 = Date.now();
    var dt = (t2 - t1) / 1000;
    log(fn.name + "(" + args.join(", ") + ") = " + ret);
    log("time: " + dt + "s");
}

time(estPi, [100000000]);
time(estPiUniform, [40000]);