当我在 scala 解释器中检查值时,例如:
scala> 1==1.0000000000000001
res1: Boolean = true
scala> 1==1.000000000000001
res2: Boolean = false
在这里,我没有得到与“scala 编译器如何将这些解释为整数或浮点数或双精度数(以及比较)”相关的清晰视图。
当我在 scala 解释器中检查值时,例如:
scala> 1==1.0000000000000001
res1: Boolean = true
scala> 1==1.000000000000001
res2: Boolean = false
在这里,我没有得到与“scala 编译器如何将这些解释为整数或浮点数或双精度数(以及比较)”相关的清晰视图。
它不是真正的 Scala 相关,它更多的是ieee-754浮点算术问题。首先,当与它进行比较时Int
,Double
它会Int
转换为Double
(总是安全的)。第二种情况很明显——价值观不同。
第一种情况发生的情况是该Double
类型无法存储那么多有效数字(在您的情况下为 17,64 位浮点最多可以存储 16 个十进制数字),因此它将值四舍五入为1
. 和1 == 1
。