C语言基于莱布尼茨级数计算π新增特定精度触发提示实现问题
解决方案
你需要在现有代码基础上补充以下内容:
- 新增两个标记变量,用于记录对应精度的提示是否已经输出,避免重复提示
- 新增每次迭代后的精度判断逻辑,命中首次达到精度的条件时输出特殊提示
修改后的完整代码
#include <stdio.h> int main(void) { int i, den; // denominator and counter double pi = 4; // 新增标记变量:0代表未输出对应精度提示,1代表已输出 int reach_314 = 0, reach_3141 = 0; for (i = 0; i < 10000; i++) { den = i * 2 + 3; // (4 - 4/3 + 4/5 -4/7 + 4/9 -......) if (i % 2 == 0) { pi = pi - (4.0 / den); } else { pi = pi + (4.0 / den); } // 新增精度判断逻辑 // 判断是否首次达到3.14精度(保留两位小数为3.14) if (reach_314 == 0 && pi >= 3.135 && pi < 3.145) { printf("*首次达到3.14精度,当前迭代次数:%d,当前pi值:%lf*\n", i+1, pi); reach_314 = 1; } // 判断是否首次达到3.141精度(保留三位小数为3.141) if (reach_3141 == 0 && pi >= 3.1405 && pi < 3.1415) { printf("*首次达到3.141精度,当前迭代次数:%d,当前pi值:%lf*\n", i+1, pi); reach_3141 = 1; } printf("pi = %lf\n", pi); } return 0; }
补充说明
- 这里用区间判断的方式校验精度,不需要额外引入其他头文件,编译运行逻辑和原代码一致
- 如果你希望用和真实圆周率的误差来判断精度,可以引入
<math.h>头文件,使用fabs(pi - 3.1415926535) < 0.005的方式判断,编译时需要添加-lm参数链接数学库 - 标记变量的作用是保证只有第一次达到对应精度时会输出提示,后续迭代不会重复输出
内容的提问来源于stack exchange,提问作者AymanTheBeginner
相关产品推荐
相关产品推荐

