| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7463 人关注过本帖
标题:关于求圆周率PI的近似值的问题(两种算法精度相差很大,想知道是由哪一步引 ...
取消只看楼主 加入收藏
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
结帖率:62.5%
收藏
已结贴  问题点数:10 回复次数:3 
关于求圆周率PI的近似值的问题(两种算法精度相差很大,想知道是由哪一步引起的)
用π/4=1-1/3+1/5-1/7+.....的公式求π的近似值
算法一和算法二精度相差很大,是不是因为算法一中pi=pi+t,而算法二中pi=pi+t1+t2,由于算法二是两个值一起加在pi原先的值上,所以导致误差更大?

算法一:(用S表示符号位,没加上一个新的值符号变化一次),此法得到结果为3.141594
#include<stdio.h>
#include<math.h>
void main()
{
    int n;
    float pi,t1,t2;
    n=1;
    pi=1;
    t1=1;
    t2=1;
   
    while(fabs(t2)>=1e-6)
    {
        n=n+2;
        t1=-t1;
        t2=t1/n;
        pi=pi+t2;
    }
    pi=4*pi;
    printf("pi is %f",pi);
}

算法二:每循环一次负正两项一起加,此法得到结果是3.141802
#include<stdio.h>
#include<math.h>
void main()
{
    int n;
    float pi,t1,t2;
    n=1;
    pi=1;
    t2=1;
    while(fabs(t2)>=1e-6)
    {
        t1=-1.0/(n+2);
        t2=1.0/(n+4);
        pi=pi+t1+t2;
        n=n+4;
    }
    pi=4*pi;
    printf("pi is %8.6f",pi);
}
搜索更多相关主题的帖子: include 圆周率 
2013-02-16 16:55
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 2楼 cnfarer
好像的确不同,不过好像循环终止条件引起的误差不会这么大啊?
2013-02-17 20:45
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 3楼 爱学习的我
算法顺序没有弄错哦~我又用VC试了一下以下两个程序:第一个程序得到的值是0.5,第二个程序得到的值是0;我也查了一下书,教材上的话如果是下面第一段程序的情况也会给t赋值为1.0;会不会有些编译器像处理这类问题的时候会把结果处理成浮点数,而有些编译器会处理成整型?然后最好是定义成1.0的形式?不过这好像不是求圆周率那两段程序造成误差的原因

#include<stdio.h>
void main()
{float t;
int n;
t=1;n=2;
t=t/n;
printf("%f",t);
}

#include<stdio.h>
void main()
{float t;
t=1/2;
printf("%f",t);
}
2013-02-17 20:56
killah
Rank: 2
等 级:论坛游民
帖 子:55
专家分:11
注 册:2013-2-4
收藏
得分:0 
回复 6楼 爱学习的我
嗯,对的,下次我也要注意一下,FLOAT类型的就给赋成小数形式
2013-02-19 18:36
快速回复:关于求圆周率PI的近似值的问题(两种算法精度相差很大,想知道是由哪一 ...
数据加载中...
 
   



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

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