gpt4 book ai didi

C: double 算术不精确

转载 作者:行者123 更新时间:2023-11-30 15:05:56 24 4
gpt4 key购买 nike

我有以下 C 代码:

int main()
{
double a=.1,b=.2,c=.3,d=.4;
double e=a+b+c;
if (d- (1-e)){printf("not equal\n");}
printf("%.20f\n",d-(1-e));
}

我得到的结果是:

not equal
0.00000000000000011102

我知道这是由于计算机保存 double 的方式引起的不精确。有没有办法解决这个问题,并使d-(1-e)等于0?

最佳答案

正如 PRP 正确建议的那样:您需要设置一个小数字用作零。标准 C 库(C 标准中的附录 F)为此目的在 float.h 中提供了一些宏。您可以像这样使用它们:

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

int main()
{
double a = .1, b = .2, c = .3, d = .4;
double e = a + b + c;
if (d - (1 - e)) {
printf("not equal\n");
}
printf("%.20f\n", d - (1 - e));
printf("%.20f\n", DBL_EPSILON);
if (fabs(d - (1 - e)) <= DBL_EPSILON) {
printf("equal\n");
}
exit(EXIT_SUCCESS);
}

关于C: double 算术不精确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481598/

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