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

nia*_*ian 5 ruby

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

Jör*_*tag 6

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

ISO的Ruby语言规范只规定Integer类.它允许特定于实现的子类,但它不指定它们.

Fixnums是一个优化,应该是实现的内部优化,永远不应该暴露给程序员.想想YARV中的flonum.您是否注意到在YARV 2.0中引入了flonum?他们所做的只是让自己Float更快.但你永远不会看到他们.这是应该的.

而事实上,YARV 2.4移除了FixnumBignum,只会有IntegerS IN的未来.Fixnum并且由于向后兼容的原因,它会Bignum作为别名保留一段时间Integer,但是类本身将会消失.

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

Fixnums 的大小限制(如果它们一直存在)取决于平台和实现.在JRuby上,Fixnums总是64位,在YARV上,它们在64位平台上是63位,在32位平台上是31位.在蛋白石上,Integers被实现为ECMAScript Number(实际上是IEEE754浮点数,因此仅对53位精确),我认为它们甚至没有Fixnums或Bignums.