Quelle est la différence entre Math.random() * n
et Random.nextInt(n)
où n
est un entier?
Réponses
Trop de publicités?Voici l'explication de pourquoi "Random.nextInt(n)
est à la fois plus efficace et moins biaisé que l' Math.random() * n
" du Soleil les forums que Gili lié à:
Les mathématiques.random() utilise Aléatoire.nextDouble() en interne.
Aléatoire.nextDouble() utilise Aléatoire.next() deux fois pour générer un double qui a environ répartie uniformément bits dans sa mantisse, de sorte qu'il est distribué uniformément dans l'intervalle de 0 à 1-(2^-53).
Aléatoire.nextInt(n) utilise Aléatoire.next() moins de deux fois supérieure à la moyenne -, il l'utilise une fois, et si la valeur obtenue est supérieure à la plus haute multiple de n ci-dessous MAX_INT il essaie de nouveau, sinon renvoie la valeur modulo n (ce qui empêche les valeurs ci-dessus le plus grand multiple de n ci-dessous MAX_INT l'inclinaison de la distribution), afin de retourner une valeur qui est distribuée de manière uniforme dans l'intervalle de 0 à n-1.
Avant la mise à l'échelle en 6, la sortie de Mathématiques.random() est l'une des 2^53 valeurs possibles élaboré à partir d'une distribution uniforme.
Mise à l'échelle en 6 ne modifie pas le nombre de valeurs possibles, et la conversion d'un int alors les forces de ces valeurs dans l'un des six seaux' (0, 1, 2, 3, 4, 5), chaque segment correspondant à des plages englobant soit 1501199875790165 ou 1501199875790166 des valeurs possibles (comme 6 n'est pas un disvisor de 2^53). Cela signifie que pour un nombre suffisant de jets de dés (ou d'une filière, d'un nombre suffisamment important de côtés), la filière sera se montrer à être orientés vers les grands seaux.
Vous serez en attente d'un temps très long roulement de dés pour cet effet de le montrer.
Les mathématiques.random() nécessite également environ deux fois le traitement et est soumis à la synchronisation.
Selon https://forums.oracle.com/forums/thread.jspa?messageID=6594485�% Random.nextInt(n)
est à la fois plus efficace et moins biaisé que Math.random() * n