Calculate PI

by SHELDON PASCIAK

HTML

<script src="http://cdn.jsdelivr.net/bignumber.js/1.1.0/bignumber.min.js"></script>

JavaScript

/*jslint maxerr: 50, indent: 4, browser: true, white: true, devel: true */
/*global BigNumber */

(function() {
    "use strict";

    function pi(digits) {
        digits = Math.floor(digits);
        var config = BigNumber.config(),
            previousConfig = {},
            k = 0,
            prop,
            sum,
            ta,
            tb,
            divisor,
            a,
            b;

        for (prop in config) {
            if (config.hasOwnProperty(prop)) {
                previousConfig[prop] = config[prop];
            }
        }

        BigNumber.config({
            DECIMAL_PLACES : digits,
            ROUNDING_MODE : 4,
            EXPONENTIAL_AT : [-7, 20],
            RANGE : [-1000000000, 1000000000],
            ERRORS : true
        });

        sum = new BigNumber(0);
        a = ta = new BigNumber(16).div(5);
        b = tb = new BigNumber(-4).div(239);
        while (!a.equals(b)) {
            divisor = 2 * k + 1;
            a = ta.div(divisor);
            b = tb.div(divisor);
            sum = sum.plus(a).plus(b);
            ta = ta.neg().div(25);
            tb = tb.neg().div(57121);
            k += 1;
        }

        for (prop in previousConfig) {
            if (previousConfig.hasOwnProperty(prop)) {
                config[prop] = previousConfig[prop];
            }
        }

        return sum;
    }

    console.log(pi(200).toString());
}());