>  기사  >  Java  >  ## Java의 특정 범위 내에서 임의의 BigInteger 값을 어떻게 생성합니까?

## Java의 특정 범위 내에서 임의의 BigInteger 값을 어떻게 생성합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-25 07:18:29285검색

## How do you generate random BigInteger values within a specific range in Java?

Java에서 임의의 BigInteger 값 생성

지정된 범위 내에서 임의로 큰 임의의 정수를 생성해야 하는 시나리오에서 일반적인 접근 방식은 nextDouble()을 사용하고 다음을 곱하는 것입니다. 원하는 한도로 출력합니다. 그러나 이 방법은 2^53을 초과하는 값에 대해 문제가 되어 균일하지 않은 분포로 이어집니다.

이러한 제한을 극복하기 위해 Java는 0과 0 사이에 균일하게 분포된 난수를 생성하는 생성자를 제공하는 BigInteger 클래스를 제공합니다. (2^numBits - 1), 포함.

2의 거듭제곱이 아닌 범위 내에서 무작위 값 생성

0부터 n까지의 범위에서 무작위 값을 생성하려면(여기서 n) 2의 거듭제곱이 아닌 경우 간단한 루프를 사용할 수 있습니다.

<code class="java">BigInteger randomNumber;
do {
    randomNumber = new BigInteger(upperLimit.bitLength(), randomSource);
} while (randomNumber.compareTo(upperLimit) >= 0);</code>

이 반복 접근 방식은 원하는 범위 내에서 균일한 분포를 보장합니다. 일반적으로 한두 번의 반복만 필요합니다.

루프의 반복 제한

난수 생성기의 계산 비용이 많이 드는 시나리오의 경우 루프의 반복 횟수를 다음과 같이 제한할 수 있습니다. :

<code class="java">int nlen = upperLimit.bitLength();
BigInteger nm1 = upperLimit.subtract(BigInteger.ONE);
BigInteger randomNumber, temp;
do {
    temp = new BigInteger(nlen + 100, randomSource);
    randomNumber = temp.mod(upperLimit);
} while (s.subtract(randomNumber).add(nm1).bitLength() >= nlen + 100);</code>

이 수정된 버전은 여러 번의 반복이 필요할 가능성이 거의 없습니다(확률은 2^100 미만). 그러나 mod() 작업으로 인해 계산상의 패널티가 발생합니다. 따라서 난수 생성기가 특히 느린 경우에만 권장됩니다.

위 내용은 ## Java의 특정 범위 내에서 임의의 BigInteger 값을 어떻게 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.