您好我知道计算机受数字精度限制,有些数字无法在二进制系统中准确表示。这就是我要问的原因 为什么这样的比较
(0.1*3) == 0.3
Java语言中的评估为false
,而在C中,它评估为true
,对我来说Java行为更直观一些。任何提供的答案都不能回答我的问题,为什么他们有不同的行为,因为两者都使用IEEE 754标准。
@Update 我正在使用ideone来测试条件。
答案 0 :(得分:2)
比较浮点值是出了名的不精确。
对于任何给定的浮点运算,只保证精度低至DBL_EPSILON
/ Double.Epsilon
。超出此精度的任何位都是算术运算的伪像,应该被忽略。
不同的程序,当然还有不同的语言,将以不同的方式实现这种比较(显然)。如果您可以设法将值与特定精度进行比较,即值的表示范围内的特定位数(例如,IEEE双精度浮点数为52位或更少),则更有可能获得相同的结果
参考 (2016年4月添加)
以下是经常引用的浮点数及其行为方式的解释:
What Every Computer Scientist Should Know About Floating-Point Arithmetic