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

时间:2013-01-10 01:59:06

标签: ruby math

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

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

3 个答案:

答案 0 :(得分:8)

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

  

IEEE 754标准隐含地将Infinity == Infinity定义为   是真的。标准的相关部分是第5.7节:“四   相互排斥的关系是可能的[两个IEEE 754之间   值]:小于,等于,大于和无序。最后一个案例   当至少一个操作数是NaN时出现。“

     

在任何一对浮点值之间恰好是这四个中的一个   关系是真的。因此,由于Infinity不是NaN,Infinity就是   对自己而言并非无序。拥有(Infinity<   Infinity)和(Infinity> Infinity)是真的不一致,所以   (无限= =无限)。

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

答案 1 :(得分:6)

虽然在大多数集理论中存在多个不同的无穷大,但实数代表的无穷大通常代表extended real number line的无穷大,其中+∞和-∞是专门选择大于和小于所有值的值实数。在此设置中,∞=∞和-∞=-∞。

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

此外,集合理论无穷大肯定有可能彼此相等。 ℵ 0 =ℵ 0 ,例如(虽然sub 0 ≠ℵ 1 )。

希望这有帮助!

答案 2 :(得分:2)

大多数现代计算机使用IEEE浮点数来表示实数。这些提供了实数的近似值,而不是真实数字。特别是有两个值代表所有无限值,+无穷大和无穷大。就像你不能完全准确地表示二进制的.1或1/3,无穷大是近似值。

因此,所有+无穷大彼此相等并且所有 - 无穷大彼此相等。