J'ai besoin de générer des nombres entiers aléatoires de taille arbitraire, compris entre 0 (inclus) et n (exclus). Ma première idée était d'appeler nextDouble
et multiplier par n, mais une fois que n devient plus grand que 2 53 les résultats ne seraient plus uniformément distribués.
BigInteger
dispose du constructeur suivant :
public BigInteger(int numBits, Random rnd)
Construit un BigInteger généré de manière aléatoire, uniformément distribué sur la plage de 0 à (2 numBits - 1), inclusivement.
Comment peut-on l'utiliser pour obtenir une valeur aléatoire comprise entre 0 et n, où n n'est pas une puissance de 2 ?