gpt4 book ai didi

java - 使用 Chudnovsky 算法计算圆周率时出错 - Java

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:09:47 31 4
gpt4 key购买 nike

我一直在尝试编写一个简单的程序来使用 Chudnovsky 算法计算圆周率,但是我总是得到错误的值输出。我写的最新代码如下并输出:

9.642715619298075837448823278218780086541162343253084414940204168864066834806498471622628399332216456e11

谁能告诉我哪里做错了。

正如 Peter de Rivaz 指出的那样,我正在丢弃 b 的值,固定输出现在是:-1.76779979383639157654764981441635890608880847407921749358841620214761790018058‌ 360012019158204749

e
    Apfloat sum = new Apfloat(0);

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

Apfloat a = ApintMath.factorial(6*k); //(6k)! * (-1)^k
a = a.multiply(ApintMath.pow(new Apint(-1),k));

Apfloat b = new Apfloat(545140134);
b = b.multiply(new Apfloat(k));
b = b.add(new Apfloat(13591409)); // 13591409 + 545140134k

Apfloat c = ApintMath.factorial(thrk); // (3k!)

Apfloat d = ApintMath.factorial(k);
d = ApfloatMath.pow(d, 3); // (k!)^3
Apfloat e = new Apfloat(640320);
e = ApfloatMath.pow(e,(thrk)); // (640320)^(3k)

a = a.multiply(b); // a is know the numerator
c = c.multiply(d).multiply(e); // c in know the denominator

Apfloat div = a.divide(c.precision(digits));
sum = sum.add(div);
}

Apfloat f = new Apfloat(10005, digits);// Works out the constant sqrt part
f = ApfloatMath.sqrt(f);
f = f.divide(new Apfloat(42709344*100));
Apfloat pi = ApfloatMath.pow(sum.multiply(f), -1);

System.out.println(pi);

最佳答案

问题 1

行中有一个问题:

b.add(new Apfloat(13591409));

这会将 13591409 添加到 b,并丢弃结果。

尝试:

b = b.add(new Apfloat(13591409));

问题2

线路有问题:

f = f.divide(new Apfloat(42709344*100));

问题是 Java 中的数字默认是 32 位整数,所以 42709344*100 会溢出。

尝试:

f = f.divide(new Apfloat(42709344*100L));

关于java - 使用 Chudnovsky 算法计算圆周率时出错 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21561914/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com