在 Flanagan 和 Matz 的The Ruby Programming Language中,我读到:
这些
Numeric
类在其运算符中执行简单的类型转换==
,因此(例如) theFixnum 1
和Float 1.0
compare 是相等的。
鉴于即使是两个Float
s 表示1.0
也可能由于舍入而无法通过相等性测试,那么如何保证 aFixnum
和 a之间的相等性Float
?难道不能只保证 aDecimal
和 a之间Float
吗?
还是这本书不准确,因为这不是本章上下文的重点?
一个编辑,希望增加清晰度:
我刚刚读到 IEEE754 (浮点)可以精确地表示最大为 2 24的整数,并且最多可以表示为 2 53的整数。根据这个问题,2 53 +1 (9,007,199,254,740,993) 是第一个不能用双精度表示的整数(因此是浮点数)。然后我的问题是,如何
9007199254740993.0 == 9007199254740993
评价为true
? 舍入不应该导致左侧(不能用double
or表示float
)舍入到与右侧不匹配的值(精确整数)?