BBPbigint = {
if (!supportsBigInt) return () => () => 0;
return new Function(`
function modPow(b, e, m) {
if (!e) return 1n;
b = b % m;
let y = 1n;
while (true) {
if (e & 1n) y = (y * b) % m;
e >>= 1n;
if (!e) return y;
b = (b * b) % m;
}
}
function S(j, n, d, mask) {
const shift = d << 2n;
let left = 0n;
for (let k = 0n; k <= n; k++) {
let r = k * 8n + j;
left = (left + (modPow(16n, n - k, r) << shift) / r) & mask;
}
let right = 0n;
for (let k = n + 1n; ; k++) {
let rnew = right + 16n ** (d + n - k) / (k * 8n + j);
if (right === rnew) break;
right = rnew;
}
return left + right;
}
return function computePi(dd, nn) {
const n = BigInt(nn);
const d = BigInt(dd) - 1n;
const mask = 16n ** n - 1n;
return (
4n * S(1n, d, n, mask) -
2n * S(4n, d, n, mask) -
S(5n, d, n, mask) -
S(6n, d, n, mask)
) & mask;
};`)();
}