Что не так с моей реализацией алгоритма BBP? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь реализовать алгоритм BBP для вычисления n-й шестнадцатеричной цифры числа Pi и застрял в реализации.

Я уже пытался переписать этот бит два или три раза, и сейчас мне трудно понять, что я сделал не так. Возможно (и возможно) что-то очевидное, но я этого еще не видел.

// 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);

Я ожидал получить где-нибудь шестнадцатеричные цифры числа Пи, но они нигде не оказались в результатах, которые я получил:

    (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_π)

...