IT박스

BigInteger에 대한 상한이 있습니까?

itboxs 2020. 10. 22. 07:49
반응형

BigInteger에 대한 상한이 있습니까?


중복 가능성 :
제한이없는 BigInteger는 무엇을 의미합니까?

Javadoc은 BigInteger최대 또는 최소를 정의하지 않습니다. 그러나 다음과 같이 말합니다.

(강조 추가됨)

불변의 임의 정밀도 정수

이론적으로도 그런 최대 값이 있습니까? 아니면 방법이 BigInteger현실에 존재하지 않도록, 근본적으로 다른 운영 에는 최대 컴퓨터에서 사용 가능한 메모리의 양을 제외하고?


숫자는 int[]-배열의 최대 크기는 Integer.MAX_VALUE입니다. 따라서 최대 BigInteger는 아마도 (2 ^ 32) ^ Integer.MAX_VALUE.

확실히 이것은 사양의 일부가 아니라 구현에 따라 다릅니다.


Java 8에서 일부 정보가 BigInteger javadoc 에 추가되어 현재 구현의 최소 지원 범위와 실제 한계를 제공합니다.

BigInteger-2Integer.MAX_VALUE(제외)에서 +2Integer.MAX_VALUE(제외) 범위의 값을 지원해야하며 해당 범위 밖의 값을 지원할 수 있습니다.

구현 참고 사항 : BigInteger생성자 및 연산 ArithmeticException은 결과가 지원되는 범위 인 -2Integer.MAX_VALUE(배타적)에서 +2Integer.MAX_VALUE(배타적) 까지의 범위를 벗어날 때 발생합니다 .


BigInteger는 십진수가 아니며 long 데이터 유형이 충분히 크지 않을 가능성이있는 경우에만 사용됩니다. BigInteger는 최대 크기에 제한이 없습니다 (컴퓨터의 RAM이 수용 할 수있는 크기만큼).

에서 여기 .

다음을 사용하여 구현됩니다 int[].

  110       /**
  111        * The magnitude of this BigInteger, in <i>big-endian</i> order: the
  112        * zeroth element of this array is the most-significant int of the
  113        * magnitude.  The magnitude must be "minimal" in that the most-significant
  114        * int ({@code mag[0]}) must be non-zero.  This is necessary to
  115        * ensure that there is exactly one representation for each BigInteger
  116        * value.  Note that this implies that the BigInteger zero has a
  117        * zero-length mag array.
  118        */
  119       final int[] mag;

에서 소스

Wikipedia 기사 Arbitrary-precision arithmetic에서 :

일부 최신 프로그래밍 언어에는 bignums에 대한 기본 지원이 있으며 다른 프로그래밍 언어에는 임의 정밀도 정수 및 부동 소수점 수학에 사용할 수있는 라이브러리가 있습니다. 이러한 구현은 일반적으로 프로세서 레지스터의 크기와 관련된 고정 된 수의 이진 비트로 값을 저장하는 대신 가변 길이 숫자 배열을 사용합니다.


가장 먼저 맞출 수있는 최대 값은 2 31 -1 자리 인 문자열의 길이입니다 . BigInteger의 최대 값보다 훨씬 작지만 IMHO는 인쇄 할 수 없으면 값의 많은 부분을 잃습니다.

참고 URL : https://stackoverflow.com/questions/12693273/is-there-an-upper-bound-to-biginteger

반응형