标题:求圆周率中的精度问题,请大家帮我看看
只看楼主
帝师
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:166
专家分:92
注 册:2018-10-11
结帖率:92.31%
已结贴  问题点数:20 回复次数:2 
求圆周率中的精度问题,请大家帮我看看
计算圆周率1
题目描述:
圆周率可以采用如下公式进行计算:
 pi/2=1+1*1/3+1*1/3*2/5+1*1/3*2/5*3/7+..........
现要求根据输入的精度e,即最后一项的值不小于精度e时,输出相应的圆周率的值,结果保留六位小数。
输入
输入一个精度e。
输出:
输出对应的圆周率,结果保留六位小数。
样例输入;
0.00005
样例输出:
3.141480

(我代码的答案在精度上在最后几位和答案有出入,亲前辈们指点我一下
我的答案:3.141538
)
#include<stdio.h>
int main()
{
    double pi=1;
    double x,y;//分子分母
    double sum=1;//每次加上的数
    double n;//要使其小于最后一项
    scanf("%lf",&n);
    for(x=1,y=3;sum>n;x+=1,y+=2)
    {
        sum*=x/y;
        pi+=sum;
    }
    printf("%.6lf\12",2*pi);

   
}
搜索更多相关主题的帖子: 圆周率 精度 输入 输出 sum 
2018-12-06 07:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
不要再 \12 了,多恶心呀,当然你不听也就算了
你是先判断 sum>n,然后更改sum(sum*=x/y;)
sum*=x/y 移到 sum>n 之前就行了
2018-12-06 08:52
帝师
Rank: 2
来 自:湖南
等 级:论坛游民
帖 子:166
专家分:92
注 册:2018-10-11
得分:0 
回复 2楼 rjsp
这样吗?
#include<stdio.h>
int main()
{
    double pi=1;
    double x,y;//分子分母
    double sum=1;//每次加上的数
    double n;//要使其小于最后一项
    int k;
    scanf("%lf",&n);
    for(x=1,y=3;k;x+=1,y+=2)
    {
        sum*=x/y;
        if(sum>n)
            k=0;
        pi+=sum;
    }
    printf("%.6lf\12",2*pi);

   
}

I am the voice of the next generation
Completely digital
Create synthetic auras
2018-12-06 17:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-491857-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.216635 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved