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

C++使用莱布尼茨公式近似计算圆周率Pi始终输出4的问题求助

问题根源

核心问题出在C++的整数除法规则:
你的代码中i为int类型,常量1也为整型,二者执行除法运算时会走整数除法逻辑:只要i的值大于1,1 / i的计算结果就会被直接截断为0。
这就导致循环只有第一次i=1时,1/1=1会被正常计入累加值pi4,后续所有迭代的计算项都是0,pi4最终永远等于1,乘以4之后自然固定输出4,和你输入的迭代次数n无关。

修复方法

只需要把整数除法改成浮点数除法即可,最简单的改法是把分子1换成浮点数1.0:

for (i=1; i <= n ; i += 2) {
    pi4 += a * (1.0 / i);
    a = -a;
}

修改后1.0是double类型,i会被自动提升为double参与运算,就能得到正确的小数计算结果。

可选优化点
  • 建议把循环变量i的类型改为long,避免你设置的迭代次数n超出int的取值范围时发生溢出
  • 莱布尼茨公式收敛速度极慢,要得到精度到小数点后7位的Pi值大约需要千万次迭代,如果对精度要求高可以考虑换收敛更快的圆周率计算公式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:24:02