[用Java计算Pi(快速)

问题描述 投票:0回答:1

我想制作一个快速生成器(如果可能的话,用Java编写),该生成器给我Pi(当然还有小数)。我已经制作了一个,它使用了for循环和BigDecimals:

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

此问题是:我想让它运行500.000.000次(5亿次),只用了5个小时多的时间,“只有”大约12个正确的小数位...有没有更快的解决方案?

编辑:您无需再帮助我,我已经有了解决方案(如果其他人也需要它:这是这里)

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

}

}

java pi
1个回答
0
投票

使用Clojure gist example计算PI的前N位数字>

© www.soinside.com 2019 - 2024. All rights reserved.