将双打与双重文字进行比较?

Nar*_*rek 4 c++ floating-point double comparison compare

可能重复:
我应该如何进行浮点比较?

是不是建议在C++中比较double和double文字的相等性,因为我猜它是依赖于编译器的?

更准确地说,比较硬编码的双精度(源代码中的文字)和应该计算的双精度是不行的,因为计算结果的最后一个数字可能因编译器而异. .这不标准化吗?

我听说这是在Knuth的TeXbook中提到的,是吗?

如果这一切都是真的,那么解决方案是什么?

jal*_*alf 6

你有点误解了这个建议.关键是浮点计算并不准确.发生舍入错误,精度逐渐丧失.拿一些简单的东西1.0/10.0.结果应该0.1,但事实并非如此,因为0.1无法以浮点格式精确表示.所以实际结果会略有不同.无数其他操作也是如此,所以这一点与const双打无关.这与预期结果不准确无关.如果你执行一些计算它的结果应该1.0,那么你不应该测试其对平等1.0,因为舍入误差可能意味着,它实际上就出来了0.9999999997吧.

所以通常的解决方案是测试结果是否足够接近 1.0.如果它接近,那么我们假设"它足够好",并且表现得好像结果是1.0.

底线是严格相等很少用于浮点值.相反,您应该测试两个值之间的差异是否小于某个小值(通常称为epsilon)