您好我知道计算机受数字精度的限制,有些数字无法在二进制系统中准确表示.这就是我问为什么这样比较的原因
(0.1*3) == 0.3
Run Code Online (Sandbox Code Playgroud)
在Java语言中评估为false在C中它评估为true,对我来说Java行为更直观一些.任何提供的答案都不能回答我的问题,为什么他们有不同的行为,因为两者都使用IEEE 754标准.
@update我正在使用ideone来测试条件.
众所周知,比较浮点值是不精确的。
对于任何给定的浮点运算,只能保证精度低至DBL_EPSILON/ Double.Epsilon。超出此精度的任何位都是算术运算的产物,应被忽略。
不同的程序,当然还有不同的语言,将以不同的方式实现这种比较(显然)。如果您能够设法将值与特定精度进行比较,即值的表示范围内的特定位数(例如,IEEE 双精度浮点数为 52 位或更少),则您更有可能获得相同的结果。
参考 (2016 年 4 月添加)
以下是经常被引用的浮点数及其行为方式的解释:
每个计算机科学家应该了解浮点算术
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |