2016-10-14 3 views
4

Fixnum과 Bignum의 범위가 궁금합니다. Float에서는 Float :: MAX 및 Float :: MIN의 범위를 얻을 수 있습니다. Fixnum 및 Bignum에는 유사한 상수가 없습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?루비의 Fixnum과 Bignum의 최대 값과 최소값

+2

https://stackoverflow.com/questions/535721/ruby-max-integer – bjhaid

+4

TLDR 루비에 최대 int가 없습니다. – bjhaid

+2

확신하지 못하셨습니까? '(2 ** 100_000) .to_s.size # => 30103'. –

답변

5

FixnumBignum을 잊어 버리십시오. 내부 구현 세부 사항입니다. 그것들은 최적화입니다. 당신은 그들을 무시해야합니다. 걱정해야 할 유일한 수업은 Integer입니다.

ISO Ruby Language SpecificationInteger 클래스 만 지정합니다. 구현 관련 하위 클래스를 허용하지만이를 지정하지는 않습니다.

Fixnum은 구현 내부에 있어야하며 프로그래머에게 노출되지 않아야하는 최적화입니다. YYYF에서 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 비트입니다. Opal에서 Integer은 ECMAScript Number (실제로 IEEE754 부동 소수점이므로 53 비트에 대해서만 정확함) 및 I don't think they even have Fixnums or Bignums으로 구현됩니다.

관련 문제