我的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
相关产品推荐
相关产品推荐

