计算pi的java代码_以下Java代码如何计算Pi的数字?

下面的代码使用哪种算法/公式?

/**

* Computes the nth digit of Pi in base-16.

*

* If n < 0, return -1.

*

* @param n The digit of Pi to retrieve in base-16.

* @return The nth digit of Pi in base-16.

*/

public static int piDigit(int n) {

if (n < 0) return -1;

n -= 1;

double x = 4 * piTerm(1, n) - 2 * piTerm(4, n) -

piTerm(5, n) - piTerm(6, n);

x = x - Math.floor(x);

return (int)(x * 16);

}

private static double piTerm(int j, int n) {

// Calculate the left sum

double s = 0;

for (int k = 0; k <= n; ++k) {

int r = 8 * k + j;

s += powerMod(16, n-k, r) / (double) r;

s = s - Math.floor(s);

}

// Calculate the right sum

double t = 0;

int k = n+1;

// Keep iterating until t converges (stops changing)

while (true) {

int r = 8 * k + j;

double newt = t + Math.pow(16, n-k) / r;

if (t == newt) {

break;

} else {

t = newt;

}

++k;

}

return s+t;

}此代码已经在我们的问题集中为我们编写。我无法找到它使用的算法/公式,我对此很好奇。我怀疑这是一个简单的算法,但我无法仅基于这段代码在线查找公式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值