gpt4 book ai didi

c++ - C++ 中 Double 类型值的减法

转载 作者:太空宇宙 更新时间:2023-11-04 03:43:03 26 4
gpt4 key购买 nike

我想用 C++ 从一个大 double 中减去一个小 double 。这是我的代码

int main() 
{
double a=166666166667000000.000000;
double b=1.0;
double c=4.0;
double d=10.0;

double ans_b=a-b;
double ans_c=a-c;
double ans_d=a-d;

printf("%f\n%f\n%f\n",ans_b,ans_c,ans_d);
return 0;
}

此代码为我提供了以下输出 -

166666166667000000.000000
166666166667000000.000000
166666166667000000.000000

然而,这三个应该是不同的。为什么 double 类型的减法会这样?

最佳答案

166666166667000000 和 10 都可以用 double 表示。减法的实数运算结果,166666166666999990,不是。严格小于 166666166667000000 的最大双数是 166666166666999968。

166666166666999990 比 166666166666999968 更接近 166666166667000000,因此 166666166667000000 是减法的舍入到最近的 double 结果。

如果你只是做一个小数减法,你可以忽略这个问题。如果您做的小数减法足够多以至于它们的累积效应很重要,则您需要重新安排您的计算。

关于c++ - C++ 中 Double 类型值的减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26977418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com