You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java基于给定级数公式计算圆周率π并处理奇次幂减法

基于给定级数计算圆周率的Java实现修正

𝜋 = √12 × (1/(1×3⁰) - 1/(3×3¹) + 1/(5×3²) - 1/(7×3³) + ........)

原代码存在的问题

你原本的符号判断逻辑(n为偶数加、奇数减)是正确的,其他部分存在几处错误导致无法得到正确结果:

  • 冗余双重循环:该级数每一项的k值和n是一一对应的,关系为k = 2n + 1,不需要额外嵌套循环遍历k
  • 内层循环逻辑错误:循环终止条件k<=k恒成立,会触发死循环;步长写法k =+ 2是错误语法,等价于k = 2,无法实现每次加2的效果
  • 公式计算逻辑错误:原公式中3ⁿ是分母项,原代码写为分子乘法,会导致计算结果完全偏离预期
  • 整数除法问题:Java中整数相除默认返回整数,1/k如果k是int类型,当k>=2时结果会是0,需要触发浮点运算

修正后代码

public static double calculatePi(int iterateTimes){
    double sum = 0;
    for (int n = 0; n <= iterateTimes; n++) {
        // 计算当前项的参数
        double k = 2 * n + 1;
        double pow3 = Math.pow(3, n);
        double sign = n % 2 == 0 ? 1 : -1;
        // 累加当前项
        sum += sign / (k * pow3);
    }
    final double SQRT_12 = Math.sqrt(12);
    return SQRT_12 * sum;
}

使用时输入迭代次数iterateTimes即可,数值越大计算结果精度越高,迭代到100次时精度已经可以满足绝大多数普通场景使用。

内容的提问来源于stack exchange,提问作者NSD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:54:08