Comment générer des valeurs BigInteger aléatoires dans une plage personnalisée en Java
Pour générer des valeurs BigInteger aléatoires dans une plage spécifiée, en particulier lorsque la valeur supérieure limit (n) n'est pas une puissance de 2, le constructeur BigInteger(int numBits, Random rnd) peut être employé.
Pour y parvenir, une boucle est nécessaire :
<code class="java">BigInteger randomNumber; do { randomNumber = new BigInteger(upperLimit.bitLength(), randomSource); } while (randomNumber.compareTo(upperLimit) >= 0);</code>
Ceci Cette approche fournit une distribution uniforme dans la plage spécifiée et nécessite généralement moins de deux itérations.
Pour plus d'efficacité, le nombre d'itérations peut être limité :
<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>
Bien que cette version garantisse une exécution rapide en presque dans tous les cas, cela introduit une opération mod() plus coûteuse en termes de calcul. Par conséquent, le choix entre les deux approches dépend de l'instance RNG spécifique utilisée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!