我的BBP算法实现有什么问题?

时间:2019-04-24 01:22:32

标签: javascript calculation

我正在尝试实现用于计算Pi的第n个十六进制数字的BBP算法,并且被该实现卡住了。

我已经尝试重写此位两次或三次,这时我很难找出我做错了什么。这可能(可能)很明显,但我还没有看到。

// bigNum is BigNumber.js
// Temporary functions (either optimize or remove)
function Sigma(equation, minK, maxK) {
    var ret = bigNum(0);
    for(var k = minK; k < maxK; k++) {
        ret = ret.plus(equation(k));
    }
    return ret;
}
// ...
var E1 = Sigma(function(k) {
        return (
            bigNum(16).pow(
                bigNum(n).minus(k)
            ).mod(
                bigNum(8).times(k).plus(1)
            ).div(
                bigNum(8).times(k).plus(1)
            )
        );
    }, 0, n).plus(Sigma(function(k) {
        return (
            bigNum(16).pow(
                bigNum(n).minus(k)
            ).div(
                bigNum(8).times(k).plus(1)
            )
        );
    }, n + 1, iterations)),
    E2 = Sigma(function(k) {
        return (
            bigNum(16).pow(k).mod(
                bigNum(8).times(k).plus(4)
            ).div(
                bigNum(8).times(k).plus(4)
            )
        );
    }, 0, iterations),
    E3 = Sigma(function(k) {
        return (
            bigNum(16).pow(k).mod(
                bigNum(8).times(k).plus(5)
            ).div(
                bigNum(8).times(k).plus(5)
            )
        );
    }, 0, iterations),
    E4 = Sigma(function(k) {
        return (
            bigNum(16).pow(k).mod(
                bigNum(8).times(k).plus(6)
            ).div(
                bigNum(8).times(k).plus(6)
            )
        );
    }, 0, iterations);
ret = (E1.times(4)).minus(E2.times(2)).minus(E3).minus(E4);

我原本希望在某处获取pi的十六进制数字,但在我得到的结果中却没有发现它们

    (actual hex pi)
    3.243f6a8885a3
    (what i got)
    -18d.859296942
    -18d.88ff3041f
    -18a.6dcc23e83
    -188.0002e7d5a
    -18a.4de8c0e4b
    -183.c5185b613
    -183.94de284fb
    -184.cf8a29385
    -180.a701f1f71
    -17e.40250c341

(基于https://en.wikipedia.org/wiki/Bailey–Borwein–Plouffe_formula#BBP_digit-extraction_algorithm_for_π的实现)

0 个答案:

没有答案