我可能不是在回答 OP 的问题,而是在回答一些或多或少需要澄清的模糊建议。
比较两个浮点值是否相等是绝对可能的,并且可以做到。如果类型是单精度或双精度通常不太重要。
话虽如此,导致比较本身的步骤需要非常小心并彻底理解浮点的注意事项、为什么和为什么不。
考虑以下 C 语句:
result = a * b / c;
result = (a * b) / c;
result = a * (b / c);
在大多数幼稚的浮点编程中,它们被视为“等效”,即产生“相同”的结果。在浮点的现实世界中,它们可能是。或者实际上,前两个是等价的(因为第二个遵循 C 评估规则,即从左到右具有相同优先级的运算符)。第三个可能等同于也可能不等同于第一个twp。
为什么是这样?
“a * b / c”或“b / c * a”可能导致“不精确”异常,即中间或最终结果(或两者)不精确(以浮点格式表示)。如果是这种情况,结果将或多或少有些微妙的不同。这可能会或可能不会导致最终结果适合进行相等比较。意识到这一点并一次单步地执行一个操作——注意中间结果——将允许耐心的程序员“击败系统”,即为几乎任何情况构建一个高质量的浮点比较。
对于其他人来说,忽略浮点数的相等比较是很好的、可靠的建议。
这真的有点讽刺,因为大多数程序员都知道整数数学在各种情况下会导致可预测的截断。当谈到浮点时,几乎每个人都或多或少地对结果不准确感到震惊。去搞清楚。