Jacksturdy 发表于 2020-9-25 13:54:04

C求助!小甲鱼作业—求Π的近似值

题目如下:根据以下已知公式求 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呢?

求大佬帮忙啊!!!

sunrise085 发表于 2020-9-25 14:24:10

本帖最后由 sunrise085 于 2020-9-25 14:26 编辑

if那里已经把偶数排除了,为什么在if模块里面还要写一个denominator?这样岂不是把原来的13579 变成了1591317?
再者,你的循环次数太少了,求得的结果离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);
}

Jacksturdy 发表于 2020-9-25 18:43:17

sunrise085 发表于 2020-9-25 14:24
if那里已经把偶数排除了,为什么在if模块里面还要写一个denominator?这样岂不是把原来的13579 变 ...

哦哦,但是为什么像这样计算无论增加多少项小数点第6位都不能精确,这是为什么呢?C:\Users\Administrator\Desktop\CP6P)_F4O2MFA_EGM@_V2{W.png

sunrise085 发表于 2020-9-25 21:24:32

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

你把float都改为double,把int改为long就可以了
页: [1]
查看完整版本: C求助!小甲鱼作业—求Π的近似值