Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java计算Pi(fast)_Java_Pi - Fatal编程技术网

用java计算Pi(fast)

用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

我想制作一个快速生成器(如果可能的话,用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++) {

        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!");

}