| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6026 人关注过本帖
标题:求教有关C语言,输入一个精度 eps,用莱布尼茨公式,估算 Pi 值
只看楼主 加入收藏
wfjimy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2014-5-15
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:15 
求教有关C语言,输入一个精度 eps,用莱布尼茨公式,估算 Pi 值
莱布尼茨公式:
http://zh.
代码如下,程序可以运行,但是输入任意精度,输出的pi值都是0.767116.. 初学者求教。。



#include <stdio.h>
double eps; //精度
double sum=0.0; //最终输出的pi值
double pi (double eps,double sum)
{
    double numerator=1.0; //分子
    double denominator=1.0;  //分母
    double summand =0.0;  //被加数
    double sign=1.0; //符号

     do {

        summand= numerator/denominator;
        sum=sum+summand*sign;
        sign=sign*(-1);
        denominator=2*denominator+1;
     }
     while(eps<summand);

return sum;
}
int main()
{
    printf("please enter the precision of pi:\n");
    scanf("%lf",&eps);
    sum=4*sum;
    printf("Approximation of pi is %lf\n",pi(eps,sum));
    return 0;
}
搜索更多相关主题的帖子: 莱布尼茨 include double C语言 
2014-05-15 13:53
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:8 
程序代码:
#include <stdio.h>

double pi (double eps)
{
    double sum=0.0;
    double denominator=1.0;  //分母
    double summand =0.0;  //被加数
    double sign=1.0; //符号
    while(1)
    {
        summand= 1.0/denominator;
        if(summand<eps) break;
        sum+=summand*sign;
        sign=sign*(-1);
        denominator+=2;
    }
    return sum*4;
}
int main()
{
    double eps=0.000001;
    double sum=0.0;
    sum=pi(eps);
    printf("Approximation of pi is %lf\n",sum);
    return 0;
}

你这里有几处错误  包括对函数的理解都是不正确的

DO IT YOURSELF !
2014-05-15 15:03
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:8 
程序代码:
#include <stdio.h>
double eps; //精度
double sum = 0.0; //最终输出的pi值
double pi ( double eps, double sum )
{
    double numerator = 1.0; //分子
    double denominator = 1.0; //分母
    double summand = 0.0; //被加数
    double sign = 1.0; //符号
    do {
        summand = numerator / denominator;
        sum = sum + summand * sign;
        sign = sign * ( -1 );
        denominator += 2.0;
    } while ( eps < summand );
    return sum * 4;
}
int main()
{
    printf( "please enter the precision of pi:\n" );
    scanf( "%lf", &eps );
    printf( "Approximation of pi is %lf\n", pi( eps, sum ) );
    return 0;
}

我也改了一份。不知和楼上版主是否一样。
2014-05-15 15:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
关键这个小程序  没必要用到全局变量啊

DO IT YOURSELF !
2014-05-15 15:16
wfjimy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 2 楼 wp231957
这个程序没有用到精度,我后来照这程序加了printf,scanf,但程序无论如何改变精度,都输出3.141591
2014-05-15 16:36
wfjimy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 3 楼 top398
不知道为什么这个程序可能有问题,输出的pi值不正确,而且无论输入什么精度,输出都是小数点后6位
2014-05-15 16:39
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用wfjimy在2014-5-15 16:36:22的发言:

这个程序没有用到精度,我后来照这程序加了printf,scanf,但程序无论如何改变精度,都输出3.141591

程序代码:
#include <stdio.h>

double pi (double eps)
{
    double sum=0.0;
    double denominator=1.0;  //分母
    double summand =0.0;  //被加数
    double sign=1.0; //符号
    while(1)
    {
        summand= 1.0/denominator;
        if(summand<eps) break;
        sum+=summand*sign;
        sign=sign*(-1);
        denominator+=2;
    }
    return sum*4;
}
int main()
{
    double eps=0.00000001;
    double sum=0.0;
    sum=pi(eps);
    printf("Approximation of pi is %.8lf\n",sum);
    //输出是Approximation of pi is 3.14159263
    return 0;
}

DO IT YOURSELF !
2014-05-15 16:46
wfjimy
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2014-5-15
收藏
得分:0 
回复 7 楼 wp231957
程序还是不行。。题目要求是,例如:输入精度为0.001,输出pi为3.141592,输入精度为0.1,输出pi为3.14
2014-05-15 18:08
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
以下是引用wfjimy在2014-5-15 16:39:28的发言:

不知道为什么这个程序可能有问题,输出的pi值不正确,而且无论输入什么精度,输出都是小数点后6位
是的,因为你指定了 %lf 格式,输出固定是6位精度,但你可以看出 pi 在精度值的一两位之前是准确的。例如:

R:\>a
please enter the precision of pi:
0.001
Approximation of pi is 3.143589

R:\>a
please enter the precision of pi:
0.00001
Approximation of pi is 3.141613

R:\>


[ 本帖最后由 top398 于 2014-5-15 18:22 编辑 ]
2014-05-15 18:20
top398
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:427
专家分:857
注 册:2014-5-2
收藏
得分:0 
从你使用 %lf 输出来说,精度将不能超过 0.000001。
为满足这个范围内的精度需要,你可以预先再将 eps 缩小 1/100。
在输出时可以转换为字符串再进行截断和舍入。也可以乘以10的若干次方,转换为一定位数的整数,再处理输出。
2014-05-15 18:26
快速回复:求教有关C语言,输入一个精度 eps,用莱布尼茨公式,估算 Pi 值
数据加载中...
 
   



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

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