用java计算Pi(fast)
我想制作一个快速生成器(如果可能的话,用Java),它给我Pi(当然是小数)。 我已经做了一个,它使用for循环和大小数:用java计算Pi(fast),java,pi,Java,Pi,我想制作一个快速生成器(如果可能的话,用Java),它给我Pi(当然是小数)。 我已经做了一个,它使用for循环和大小数: BigDecimal pi; pi = new BigDecimal("0"); BigDecimal divide = new BigDecimal("1"); long max = <Any Number>; for (long l = 1; l < max; l++) { BigDecima
BigDecimal pi;
pi = new BigDecimal("0");
BigDecimal divide = new BigDecimal("1");
long max = <Any Number>;
for (long l = 1; l < max; l++) {
BigDecimal two = new BigDecimal("2"); //it gave me an error if it wasn't a BigDecimal.
BigDecimal four = new BigDecimal("4");
BigDecimal divide2 = divide.add(two);
BigDecimal divideend = four.divide(divide, 50, BigDecimal.ROUND_HALF_UP);
BigDecimal divideend2 = four.divide(divide2, 50, BigDecimal.ROUND_HALF_UP);
pi = pi.add(divideend);
pi = pi.subtract(divideend2);
System.out.println(pi.toString() + " " + i + " of " + max);
divide = divide.add(vier);
}
System.out.println(pi.toString() + " finished.");
BigDecimal-pi;
pi=新的大十进制(“0”);
BigDecimal除法=新的BigDecimal(“1”);
长最大值=;
用于(长l=1;l
问题是:我想让它运行500.000.000次(5亿次),它只需要5个多小时,并且“只有”大约12个正确的小数位。。。有没有更快的解决方案 编辑:你不必再帮我了,我已经有了一个解决方案(如果其他人也需要,就在这里)
import java.math.BigDecimal;
公共类的可怜虫3{
公共静态void main(字符串[]args){
BigDecimal pi=新的BigDecimal(“3”);
长l=1l;
long max=100000;//频率越高,越精确
大十进制axbxc;
大十进制除法1;
大十进制除法2;
大十进制除法3;
divide1=新的大十进制(“2”);
divide2=新的大十进制(“3”);
divide3=新的大十进制(“4”);
BigDecimal四=新的BigDecimal(“4”);
大十进制sumthing1;
大十进制sumthing2;
BigDecimal 2=新的BigDecimal(“2”);
大十进制sumthing3;
大十进制数4;
而(l<最大值){
sumthing1=divide1.乘法(divide2);
axbxc=sumthing1.乘法(除法3);
sumthing2=4.除法(axbxc,100,BigDecimal.四舍五入);
pi=pi.add(sumthing2);
divide1=divide1。添加(两个);
divide2=divide2。添加(两个);
divide3=divide3.添加(两个);
sumthing3=divide1.乘法(divide2);
axbxc=sumthing3.乘法(除法3);
sumthing4=4.除法(axbxc,100,BigDecimal.四舍五入);
π=π减去(求和4);
divide1=divide1。添加(两个);
divide2=divide2。添加(两个);
divide3=divide3.添加(两个);
System.out.println(pi.toString()+“”+l+“”+max)
l++;
}
System.out.println(pi.toString()+“finished!”);
}
}首先,你不断地构建两个
和四个。但是,还有更快的方法:没错,但我想自己做:)编辑:仍然谢谢:请看维基百科关于Pi的文章,了解一些想法。当然,Math.PI
几乎是即时的,但只适用于15或16位数字…@凯文·安德森:好吧,我刚刚漏掉了几行,现在我有了一行更好的:)谢谢,我会把它添加到主帖子中,而不是把你的答案作为一个答案发布,而不是编辑。首先,你不断地构建2
和4
。但是,还有更快的方法:没错,但我想自己做:)编辑:仍然谢谢:请看维基百科关于Pi的文章,了解一些想法。当然,Math.PI
几乎是即时的,但只适用于15或16位数字…@凯文·安德森:好的,我刚刚漏了几行,现在我有了一行更好的:)谢谢,我会将它添加到主帖子中,而不是将你的答案作为答案发布,而不是编辑。
import java.math.BigDecimal;
public class Pitest3 {
public static void main(String[] args) {
BigDecimal pi = new BigDecimal("3");
long l = 1l;
long max = 100000; //How often, the more, the more exact
BigDecimal axbxc;
BigDecimal divide1;
BigDecimal divide2;
BigDecimal divide3;
divide1 = new BigDecimal("2");
divide2 = new BigDecimal("3");
divide3 = new BigDecimal("4");
BigDecimal four = new BigDecimal("4");
BigDecimal sumthing1;
BigDecimal sumthing2;
BigDecimal two = new BigDecimal("2");
BigDecimal sumthing3;
BigDecimal sumthing4;
while (l < max) {
sumthing1 = divide1.multiply(divide2);
axbxc = sumthing1.multiply(divide3);
sumthing2 = four.divide(axbxc, 100, BigDecimal.ROUND_HALF_UP);
pi = pi.add(sumthing2);
divide1 = divide1.add(two);
divide2 = divide2.add(two);
divide3 = divide3.add(two);
sumthing3 = divide1.multiply(divide2);
axbxc = sumthing3.multiply(divide3);
sumthing4 = four.divide(axbxc, 100, BigDecimal.ROUND_HALF_UP);
pi = pi.subtract(sumthing4);
divide1 = divide1.add(two);
divide2 = divide2.add(two);
divide3 = divide3.add(two);
System.out.println(pi.toString() + " " + l + " of " + max)
l++;
}
System.out.println(pi.toString() + " finished!");
}