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

本文介绍了一种使用Java的BigDecimal类来精确计算圆周率π的方法。通过特定的数学公式进行迭代计算,实现了π值的小数点后30位的高精度输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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 + "秒");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值