浮点比较混乱
在给定的代码片段中,浮点数之间的比较检查并不像人们想象的那么简单。在处理浮点比较时,了解浮点表示和出现的潜在陷阱非常重要。
浮点陷阱
问题代码在于浮点数的比较。浮点数以二进制格式存储,使用有限位数来表示幅度和指数。这意味着浮点数表示某些值的精度存在固有的限制,从而导致舍入误差。
在提供的代码中,变量 a 和 b 都定义为浮点数。当比较 a 和 0.7 时,编译器将 float 提升为 double 进行比较。这种类型提升可能会导致精度损失,因为 a 的双精度表示形式可能不完全等于 0.7。此外,0.5 是 2 的精确幂,可以用浮点格式精确表示。
因此,比较 a
由于将 a 提升为双精度且 0.7 的表示不精确,0.7 将评估为 true。这解释了意外输出“1 是正确的”而不是预期的“0 是正确的”。确保正确比较
为了避免此类问题,有两个方法可能的方法:以上是为什么浮点比较不准确,如何确保结果正确?的详细内容。更多信息请关注PHP中文网其他相关文章!