求助:如何在C++中结合Viete公式项并使用乘积函数计算圆周率
基于Viete公式计算圆周率的C++代码完善
Viete公式的核心是通过无限乘积逼近圆周率,其形式为:
$\frac{2}{\pi} = \prod_{k=1}^{\infty} \frac{a_k}{2}$
其中 $a_1 = \sqrt{2}$,$a_{k+1} = \sqrt{2 + a_k}$
你当前的代码已经正确生成了序列$a_k$,接下来只需要在循环中累积每一项$\frac{a_k}{2}$的乘积,最后通过公式$\pi = \frac{2}{\text{乘积}}$计算圆周率。
以下是修改后的完整代码:
#include <stdio.h> #include <math.h> int main() { int n, i; n = 10; // 迭代次数,n越大精度越高 i = 1; double an = sqrt(2); double product = 1.0; // 初始化乘积变量 while(i <= n) { printf("a%d = %.10f\n", i, an); product *= an / 2.0; // 累积每一项的(a_k/2)到乘积中 an = sqrt(2 + an); ++i; } double pi = 2.0 / product; // 通过Viete公式计算圆周率 printf("当n=%d时,计算得到的圆周率为:%.10f\n", n, pi); return 0; }
关键修改说明:
- 新增
double product = 1.0;用于存储各项$\frac{a_k}{2}$的乘积,初始值设为1(乘法单位元)。 - 在循环内添加
product *= an / 2.0;,每次将当前项除以2后乘入乘积。 - 循环结束后通过
pi = 2.0 / product;得到圆周率近似值,这是根据Viete公式推导而来。
你可以通过增大n的值来提升计算精度,比如将n设为100,得到的圆周率会更接近真实值。
内容的提问来源于stack exchange,提问作者josh dun
相关产品推荐
相关产品推荐

