반응형
루비 최대 정수
Ruby에서 시스템 최대 정수를 결정할 수 있어야합니다. 방법을 아는 사람이나 가능하다면?
Ruby는 정수가 오버플로 될 때 자동으로 큰 정수 클래스로 변환하므로 크기에 제한이 없습니다.
머신의 크기 (예 : 64 비트 또는 32 비트)를 찾고 있다면 ruby-forum.com에서이 트릭을 찾았습니다 .
machine_bytes = ['foo'].pack('p').size
machine_bits = machine_bytes * 8
machine_max_signed = 2**(machine_bits-1) - 1
machine_max_unsigned = 2**machine_bits - 1
Fixnum 객체 (단일 기계어에 저장할 수있을만큼 작은 정수)의 크기를 찾고 있다면을 호출 0.size
하여 바이트 수를 가져올 수 있습니다 . 32 비트 빌드에서는 4가되어야한다고 생각하지만 지금은 테스트 할 수 없습니다. 또한 객체 참조 대신 정수로 표시하는 데 1 비트가 사용되기 때문에 가장 큰 Fixnum은 분명히 2**30 - 1
(또는 2**62 - 1
)입니다.
FIXNUM_MAX = (2**(0.size * 8 -2) -1)
FIXNUM_MIN = -(2**(0.size * 8 -2))
친숙한 매뉴얼을 읽고 계십니까? 누가하고 싶어?
start = Time.now
largest_known_fixnum = 1
smallest_known_bignum = nil
until smallest_known_bignum == largest_known_fixnum + 1
if smallest_known_bignum.nil?
next_number_to_try = largest_known_fixnum * 1000
else
next_number_to_try = (smallest_known_bignum + largest_known_fixnum) / 2 # Geometric mean would be more efficient, but more risky
end
if next_number_to_try <= largest_known_fixnum ||
smallest_known_bignum && next_number_to_try >= smallest_known_bignum
raise "Can't happen case"
end
case next_number_to_try
when Bignum then smallest_known_bignum = next_number_to_try
when Fixnum then largest_known_fixnum = next_number_to_try
else raise "Can't happen case"
end
end
finish = Time.now
puts "The largest fixnum is #{largest_known_fixnum}"
puts "The smallest bignum is #{smallest_known_bignum}"
puts "Calculation took #{finish - start} seconds"
루비에서 Fixnums는 자동으로 Bignums로 변환됩니다.
가능한 가장 높은 Fixnum을 찾으려면 다음과 같이 할 수 있습니다.
class Fixnum
N_BYTES = [42].pack('i').size
N_BITS = N_BYTES * 8
MAX = 2 ** (N_BITS - 2) - 1
MIN = -MAX - 1
end
p(Fixnum::MAX)
루비-토크 토론 에서 뻔뻔스럽게 찢어졌습니다 . 자세한 내용은 거기를 참조하십시오.
@ Jörg W Mittag가 지적했듯이 jruby에서 수정 번호 크기는 항상 8 바이트입니다. 이 코드 조각은 진실을 보여줍니다.
fmax = ->{
if RUBY_PLATFORM == 'java'
2**63 - 1
else
2**(0.size * 8 - 2) - 1
end
}.call
p fmax.class # Fixnum
fmax = fmax + 1
p fmax.class #Bignum
참고 URL : https://stackoverflow.com/questions/535721/ruby-max-integer
반응형
'program story' 카테고리의 다른 글
Bootstrap 3 .col-xs-offset- *가 작동하지 않습니까? (0) | 2020.10.12 |
---|---|
지정된 스키마로 빈 DataFrame을 만드는 방법은 무엇입니까? (0) | 2020.10.12 |
열거 형 유형을 프로그래밍 방식으로 열거하는 방법은 무엇입니까? (0) | 2020.10.11 |
시간 범위 내에서 5 분 간격으로 그룹화 (0) | 2020.10.11 |
DateTime을 웹 UTC 형식으로 어떻게 포맷 할 수 있습니까? (0) | 2020.10.11 |