用java的BigDecimal实现求PI(算法一)

用java的BigDecimal实现求PI

运行截图:
用java的BigDecimal实现求PI(算法一)_第1张图片
所用公式:
这里写图片描述
源代码:

//默认输出小数点后30位
import java.math.BigDecimal;

public class CalculatePI {

    public static void main(String[] args) {
        final int PRECISION = 31;//计算精度
        final int THENUMBEROFCIRCLES = 23;//循环次数
        BigDecimal PI = new BigDecimal(0);
        System.out.println("正在计算中...请稍后...");
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < THENUMBEROFCIRCLES; i++) {
            //PI=PI+1/16^i(4/(8i+1)-2/(8i+4)-1/(8n+5)-1/(8n+6))
            PI = PI.add((BigDecimal.valueOf(1).divide(BigDecimal.valueOf(16).pow(i))).multiply((BigDecimal.valueOf(4)
                    .divide(BigDecimal.valueOf(8).multiply(BigDecimal.valueOf(i)).add(BigDecimal.valueOf(1)), PRECISION, BigDecimal.ROUND_DOWN))//ROUND_DOWN接近零的舍入模式(截取)  
                    .subtract(BigDecimal.valueOf(2).divide(BigDecimal.valueOf(8).multiply(BigDecimal.valueOf(i)).add(BigDecimal.valueOf(4)), PRECISION,BigDecimal.ROUND_DOWN))
                    .subtract((BigDecimal.valueOf(1).divide(BigDecimal.valueOf(8).multiply(BigDecimal.valueOf(i)).add(BigDecimal.valueOf(5)), PRECISION,BigDecimal.ROUND_DOWN)))
                    .subtract((BigDecimal.valueOf(1).divide(BigDecimal.valueOf(8).multiply(BigDecimal.valueOf(i)).add(BigDecimal.valueOf(6)), PRECISION,BigDecimal.ROUND_DOWN)))));
        }
        System.out.println("PI=" + PI.setScale(30, BigDecimal.ROUND_DOWN) + "\n共用时:"//输出精度设置成30
                + (System.currentTimeMillis() - startTime) / 1000.0 + "秒");
    }
}

你可能感兴趣的