求教:求 PI 的值,换了个写法,答案不一样

题目:
计算公式

求圆周率 PI 的近似值,直到发现某一项的绝对值小于为止(该项不累加)。
要求输出的结果总宽度占 10 位,其中小数部分为 8 位。
程序中使用浮点型数据时,请定义为双精度 double 类型。

写法一:(答案错误)

#include<stdio.h>
#include<math.h>

int main()
{
    double PI = 0.0, sign = 1.0, n = 0.0, i = 1.0;
    while (fabs(sign) >= 1e-6) {
        sign = pow(-1, n) * (1.0 / i);
        PI = PI + sign;
        i = i + 2;
        n = n + 1;
    }
    printf("PI=%10.8f\n", 4 * PI);

    return 0;
}

写法二:(答案正确)

#include<stdio.h>
#include<math.h>

int main()
{
    double PI = 0, n = 1.0, t = 1 / n, sign = 1;
    while (fabs(t) >= 1e-6) {
        PI = PI + t * sign;
        sign = -sign;
        n = n + 2;
        t = 1 / n;
    }
    printf("PI=%10.8f\n", PI * 4);
    return 0;
}

上一个写法在逻辑上有误吗

#笔试题目##题解#
全部评论
sign = pow(-1, n) * (1.0 / i);
点赞 回复
分享
发布于 2019-10-13 16:14
这行要放在while里面最后一行。不然前两次 sign 都是1
点赞 回复
分享
发布于 2019-10-13 16:18
联易融
校招火热招聘中
官网直投
也就多了 4*0.000001
点赞 回复
分享
发布于 2019-10-13 16:24
两个写法,前面的每一项都相同,是不是最后几项出错了。。按照楼上老哥的方法得到了正确答案,但是有点解释不通😵😵
点赞 回复
分享
发布于 2019-10-13 17:11

相关推荐

点赞 3 评论
分享
牛客网
牛客企业服务