浅谈运算过程中数值损失

话不多说,直接上代码

图片[1],浅谈运算过程中数值损失,网络安全爱好者中心-神域博客网
#include<stdio.h>
int main()
{
    int n;
    double sum = 0;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        sum += 1 / (2 * i - 1);
    }
    printf("%.2lf", sum);
    return 0;
}

在这段代码中,无论你n的输入为多少,输出永远是1.00,这是为什么呢

众所周知,int类型的数在进行除法时会有数值损失

如10/3=3;而不是等于3.333…而double类型的数就可以保留小数部分,不会造成数值损失

sum += 1 / (2 * i - 1);

在这段代码中,1是int类型,(2 * i – 1)也是一个int类型,所以在进行除法运算时,小数部分永远会丢失,输出的结果永远是1.00

解决方法很简单,就是把1改成1.0

sum += 1.0 / (2 * i - 1);

1.0是一个浮点数,浮点/整数=浮点,不会造成数值损失啦

以此篇文章致敬我回答了n次的问题

------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
善语结善缘,恶语伤人心
提交
头像

昵称

取消
昵称常用语 夸夸
夸夸
还有吗!没看够!
表情图片

    暂无评论内容