Ruby中Fixnum和Bignum的最大值和最小值

时间:2016-10-14 03:41:23

标签: ruby

我想知道Fixnum和Bignum的范围。 在Float中,我可以使用Float :: MAX和Float :: MIN获得Float的范围。 Fixnum和Bignum中没有类似的常量。 实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分:6)

忘记FixnumBignum。它们是私有的内部实现细节。他们是优化。你应该忽略它们。您应该关注的唯一课程是Integer

ISO Ruby Language Specification仅指定Integer类。它允许特定于实现的子类,但它没有指定它们。

Fixnum是一个优化,应该是实现的内部优化,永远不应该暴露给程序员。想想YARV中的 flonum 。你有没有注意到flonums were introduced in YARV 2.0?他们所做的只是让Float更快。但你永远不会看到他们。这是应该的。

事实上,YARV 2.4 removes Fixnum and Bignum and will only have Integers in the future。由于向后兼容的原因,FixnumBignum将作为Integer的别名保留一段时间,但类本身将会消失。

在Ruby中,Integer没有最大值或最小值;它们是任意大小的整数。因此,没有任何这样的常数。

Fixnum的大小限制(如果存在的话)取决于平台和实现。在JRuby上,Fixnum总是64位,在YARV上,它们在64位平台上是63位,在32位平台上是31位。在蛋白石上,Integer被实现为ECMAScript Number s(实际上是IEEE754浮点数,因此仅对53位精确)和I don't think they even have Fixnums or Bignums