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

来源:互联网 发布:java读取zip文件夹 编辑:程序博客网 时间:2024/06/05 12:40

用java的BigDecimal实现求PI

运行截图:
这里写图片描述
所用公式:
这里写图片描述
源代码:

//默认输出小数点后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 + "秒");    }}
0 0
原创粉丝点击