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

我的Dart计算圆周率Pi的代码运行异常,请问存在什么问题?

问题排查

你采用的是莱布尼茨级数计算圆周率,对应公式为:π/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ...,现有代码存在以下几处错误:

  • 符号变量sign定义在for循环内部,每次循环都会被重置为-1,无法实现正负交替的效果,应该把sign的初始化放到循环外
  • 循环上限仅设置到15,莱布尼茨级数收敛速度极慢,仅计算到i=15的近似值误差极大,需要提升循环上限才能得到更接近真实值的结果
  • 没必要用dynamic类型声明result,改为double类型可以避免潜在的精度损失

修正后代码

void main() {
  double result = 4;
  int sign = -1;
  // 循环上限越大,计算结果越接近真实π值
  for (var i = 3; i <= 100000; i++) {
    if (i % 2 != 0) {
      var t = 4 * (1 / i);
      result = result + t * sign;
      sign = sign * -1;
    }
  }
  print(result);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:12:02