【发布时间】:2022-12-18 03:19:27
【问题描述】:
在 C++ 中,是否有一个编译器标志或某个选项使它成为这样,如果 2 个浮点数在浮点运算的误差范围内,它们被评估为相等?
必须追踪浮点错误很烦人。 例如,很久以前,在测试我知道值是什么的东西时,我什至覆盖了该行之前的值,但它仍然失败。 这是一个非常简化的版本
double x = 3;
if(x == 3)
printf("x is 3");
else
printf("x is not 3");
然后进入 else 案例并打印“x is not 3”
必须有一种方法来处理这个问题,这并不意味着我必须为每个浮点比较添加处理。
【问题讨论】:
-
对不起,没有,没有这样的标志。
-
所以,您正在寻找一个标志,告诉编译器两个浮点数应该比较相等,即使它们不相等?用浮点数学计算的结果和用实数计算的结果之间的差异是无法准确确定的;如果是这样,就不会有“浮点错误”的概念。请记住,浮点数学并不遵循您一生中学到的关于数字如何工作的规则。这并没有错,就像
int x = 1/3; if (x * 3 != 1) /* something is wrong */一样。
标签: c++ floating-point