| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 332 人关注过本帖
标题:新人求帮助~~
只看楼主 加入收藏
foruner
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-4
收藏
 问题点数:0 回复次数:4 
新人求帮助~~
这是一个常见的求圆周率的问题。公式是  派=4*(1-1/3+1/5-1/7.......)
#include <stdio.h>
#include <math.h>
int main ()
{
    float pi, m, j, sum = 1.0;
    for (int i = 2; fabsf(sum) >= 1e-6; i++) {
        m = pow(-1, (i -1));
        j = m / ((2.0 * i)- 1);
        sum = sum +j;
    }
    pi = 4.0 * sum;
    printf("%10.8f\n", pi);
    return 0;
}
想问问各位大神,这个程序哪里错了?
搜索更多相关主题的帖子: include return 圆周率 
2015-11-04 19:14
foruner
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-4
收藏
得分:0 
下面我把注释也标一下吧
#include <stdio.h>
#include <math.h>
int main ()
{
    float pi, m, j, sum = 1.0;             //设置参数,pi就是派 m表示符号(因为括号里的数是正、负交替变化的),j表示数(-1/3、1/5等)
    for (int i = 2; fabsf(sum) >= 1e-6; i++) {   //这里采用的循环条件是 “和的绝对值不小于10的-6次幂”(个人实验了几次,感觉问题在这里)
        m = pow(-1, (i -1));               //求符号
        j = m / ((2.0 * i)- 1);            //求数,-1/3  1/5   -1/7等等
        sum = sum +j;                      //求和,把所得的数都加起来
    }
    pi = 4.0 * sum;                       //把最后的和 乘以 4 得出派的值
    printf("%10.8f\n", pi);
    return 0;
}
2015-11-04 19:20
foruner
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-4
收藏
得分:0 
这个程序总是卡住。运行不出结果。不知道为什么,也不知道错在哪里了。求帮助
2015-11-04 19:25
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
你的sum值肯定是逼近3.14/4,它怎么可能小于0.0000001?修正的是误差,而变化的误差是j,所以for循环的条件为fabsf(j) >= 1e-6,该句改正如下:
for (int i = 2; fabsf(j) >= 1e-6; i++)

能编个毛线衣吗?
2015-11-04 20:17
foruner
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2015-11-4
收藏
得分:0 
回复 4楼 wmf2014
一语道破!开窍了,谢谢!!太谢谢了!!!
2015-11-04 20:21
快速回复:新人求帮助~~
数据加载中...
 
   



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

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