Java에서 임의의 BigInteger 값 생성
Java에서는 큰 숫자를 처리할 때 지정된 범위 내에서 임의의 정수를 생성하는 것이 어려울 수 있습니다. 난수 생성을 위해 nextDouble()과 같은 기존 방법을 사용할 때 문제가 발생합니다. 생성된 값이 253 제한을 넘어 균일하게 분포되지 않을 수 있기 때문입니다.
BigInteger 생성자 활용
이 문제를 해결하기 위해 BigInteger 클래스는 지정된 비트 범위 내에 균일하게 분포된 임의의 BigInteger 값을 생성할 수 있는 생성자를 제공합니다.
BigInteger 생성자를 생성합니다.
<code class="java">public BigInteger(int numBits, Random rnd)</code>
이 생성자는 두 개의 매개변수를 사용합니다.
범위 내에서 임의의 값 생성
범위 내에서 임의의 값을 생성하려면 0 ~ 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>
이 접근 방식에는 과도한 루프 실행을 방지하기 위해 반복 횟수에 대한 제한이 포함됩니다. 속도와 정확성의 균형을 유지하여 광범위한 반복 횟수가 발생할 가능성을 줄입니다.
위 내용은 Java의 특정 범위 내에서 균일하게 분포된 무작위 BigInteger 값을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!