肖-肖 发表于 2021-4-16 17:55:39

C语言求Π的近似值的问题

本帖最后由 肖-肖 于 2021-4-16 17:58 编辑

我的问题是为什么输出的是:5.135300
我感觉我写的没错啊,代码如下
/**编写程序,根据以下公式求Π的近似值,要求累加到某项小于1e-6次方时为止
Π/2=1 + 1/3 + 1*2/3*5 + 1*2*3*4/3*5*7*9 + ......+ 1*2*...*n/3*5*...*(2n+1)
*/
#include <stdio.h>
int main()
{
    float i,j,n,m,pi;//i:分子 j:分母
    n=1.0;m=1.0;i=1.0;j=1.0;pi=0.0;
    while(n/m>=exp(-6))
    {
      pi+=n/m;//求和
      i++;
      j=j+2;
      n=n*i;
      m=m*j;
    }
    pi=pi*2;
    printf("%f",pi);
    return 0;
}

请帮我分析一波,谢谢,尽可能详细点~~~

wp231957 发表于 2021-4-16 21:54:44

第二次循环貌似不对吧
期望1/3   你的貌似2/3

CodeCloud 发表于 2021-4-17 11:11:33

第二次循环,i变成2,m变成3,加成了2/3而不是1/3

肖-肖 发表于 2021-4-17 14:05:36

wp231957 发表于 2021-4-16 21:54
第二次循环貌似不对吧
期望1/3   你的貌似2/3

嗯 我把i的初值改为了0.0
结果是: 3.137130
      和: 3.1415926
差不多了,这么改行吧,应该没什么么问题了吧~

yuxijian2020 发表于 2021-4-17 16:54:47

题目的意思是 到某项小于 1e-6 为止,但是第一个小于1e-6的项还是要的

int main()
{
    double pi = 1.0;      //第一项 为1
    double cur = 0.0;       //当前项
    int i = 1;            //分子
    int j = 2 * i + 1;;   //分母
    double up = 1;          //计算后的分子
    double down = 1;      //计算后的分母

    do
    {
      up *= i;
      down *= j;
      cur = up / down;

      pi += cur;

      i++;
      j = 2 * i + 1;

    } while (cur >= 1e-6);
   

    printf("%lf\n", 2 * pi);

    return(0);
}

结果
页: [1]
查看完整版本: C语言求Π的近似值的问题