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

求助:如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:55:54