鱼C论坛

 找回密码
 立即注册
查看: 1166|回复: 4

[已解决]C语言求Π的近似值的问题

[复制链接]
发表于 2021-4-16 17:55:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 肖-肖 于 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;
}
请帮我分析一波,谢谢,尽可能详细点~~~
最佳答案
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.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-16 21:54:44 From FishC Mobile | 显示全部楼层
第二次循环貌似不对吧
期望1/3   你的貌似2/3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-17 11:11:33 | 显示全部楼层
第二次循环,i变成2,m变成3,加成了2/3而不是1/3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-4-17 14:05:36 | 显示全部楼层
wp231957 发表于 2021-4-16 21:54
第二次循环貌似不对吧
期望1/3   你的貌似2/3


嗯 我把i的初值改为了0.0
结果是: 3.137130
      和: 3.1415926
差不多了,这么改行吧,应该没什么么问题了吧~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 15:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表