为什么Ruby中的Float :: INFINITY == Float :: INFINITY?

Arc*_*eja 5 ruby math

在数学中,2个无穷大不相等,也不大于或小于.什么给出了什么?

在irb中,Float :: INFINITY == Float :: INFINITY(在ruby 1.9.3中测试)

bra*_*ain 8

从技术角度来说,这一切都归结为浮点算术的IEEE 754标准.

IEEE 754标准确实隐含地将Infinity == Infinity定义为真.该标准的相关部分是第5.7节:"两个IEEE 754值之间可能有四个相互排斥的关系:小于,等于,大于和无序.最后一种情况出现在至少有一个操作数为NaN时."

在任何一对浮点值之间,恰好这四个关系中的一个是真的.因此,由于Infinity不是NaN,Infinity本身并不是无序的.使(Infinity <Infinity)和(Infinity> Infinity)中的一个为真是不一致的,因此(Infinity == Infinity).

这取自http://compilers.iecc.com/comparch/article/98-07-134


tem*_*def 6

虽然在大多数集理论中存在多个不同的无穷大,但由实数表示的无穷大通常表示扩展实数线的无穷大,其中+∞和-∞是特别选择为大于和小于所有实数的值.在此设置中,∞=∞和-∞=-∞.

不相等的集合理论无穷大是基数有序数,通常不会用浮点值表示.它们分别测量集合中的大小和位置,因此作为另一种类型的概括(例如整数类型)会更好.如果您想存储这些类型的值,您可能会有一个表示无限序数或无限基数的自定义类型.

而且,集合理论无穷大肯定有可能彼此相等.ℵ 0 =ℵ 0,例如(尽管ℵ 0 ≠ℵ 1).

希望这可以帮助!