鱼C论坛

 找回密码
 立即注册
查看: 2141|回复: 3

[已解决]C求助!小甲鱼作业—求Π的近似值

[复制链接]
发表于 2020-9-25 13:54:04 | 显示全部楼层 |阅读模式

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

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

x
题目如下:根据以下已知公式求 Pi 的近似值,要求正确计算出小数点后前 7 位(即3.1415926)

我的代码是
#include<stdio.h>

int main(){
        int term,denominator;//项数 ,分母
        float sign=1.0;//分子
        float pi = 0.0;
        for(term=0;term<7;term++){
                if(term%2) {//这里面表示奇数项
                        denominator=2*term-1;
                        pi = pi+(sign/denominator);
                        sign = -sign;
                }
       
        }
        pi = pi*4.0;
        printf("pi的近似值为%10.7f",pi);
}
为什么我的结果是3.6几?
得不到3.1415926呢?

求大佬帮忙啊!!!
最佳答案
2020-9-25 14:24:10
本帖最后由 sunrise085 于 2020-9-25 14:26 编辑

if那里已经把偶数排除了,为什么在if模块里面还要写一个denominator?这样岂不是把原来的1  3  5  7  9 变成了1  5  9  13  17?
再者,你的循环次数太少了,求得的结果离3.14太远了,计算700000项的时候,才精确到小数点后5位数
#include<stdio.h>

int main(){
    int term,denominator;//项数 ,分母 
    float sign=1.0;//分子 
    float pi = 0.0; 
    for(term=0;term<700000;term++){
        denominator=2*term+1;//这里面表示奇数项
        pi = pi+(sign/denominator); 
        sign = -sign;
    } 
    pi = pi*4.0;
    printf("pi的近似值为%10.7f",pi);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-25 14:24:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-9-25 14:26 编辑

if那里已经把偶数排除了,为什么在if模块里面还要写一个denominator?这样岂不是把原来的1  3  5  7  9 变成了1  5  9  13  17?
再者,你的循环次数太少了,求得的结果离3.14太远了,计算700000项的时候,才精确到小数点后5位数
#include<stdio.h>

int main(){
    int term,denominator;//项数 ,分母 
    float sign=1.0;//分子 
    float pi = 0.0; 
    for(term=0;term<700000;term++){
        denominator=2*term+1;//这里面表示奇数项
        pi = pi+(sign/denominator); 
        sign = -sign;
    } 
    pi = pi*4.0;
    printf("pi的近似值为%10.7f",pi);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-25 18:43:17 | 显示全部楼层
sunrise085 发表于 2020-9-25 14:24
if那里已经把偶数排除了,为什么在if模块里面还要写一个denominator?这样岂不是把原来的1  3  5  7  9 变 ...

哦哦,但是为什么像这样计算无论增加多少项小数点第6位都不能精确,这是为什么呢?C:\Users\Administrator\Desktop\CP6P)_F4O2MFA_EGM@_V2{W.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-25 21:24:32 | 显示全部楼层
Jacksturdy 发表于 2020-9-25 18:43
哦哦,但是为什么像这样计算无论增加多少项小数点第6位都不能精确,这是为什么呢?

你把float都改为double,把int改为long就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 02:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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