我正在尝试实现用于计算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_π的实现)