[CHIPOTAGE (une fois n'est pas coutume...)]
Envoyé par
disedorgue
En fait, selon le "pseudo-raisonnement" que je viens de donner, le meilleur choix serait:
($RANDOM%600)*($RANDOM%500)
Et qui d'ailleurs n'est autre que le modulo du nombre de mots mais répartie sur l'ensemble des randoms...
Envoyé par
xflr6
J'ai l'impression que pour le choix du mot, ce qu'il faut faire est clairement dit dans l'énoncé : multiplier 2 random d'entiers sur 16 bits pour simuler une distribution uniforme sur 32
j'ai de sérieux doutes sur l'uniformité de la distribution, rien que pour la densité des pairs et impairs, mais bon...
Comme l'a très justement fait remarquer xflr6, j'ai aussi de sérieux doutes quant à la parité du résultat:
La formule $RANDOM%600 fournit, en moyenne, autant d'entiers pairs que d'entiers impairs.
La formule $RANDOM%500 fournit, en moyenne, autant d'entiers pairs que d'entiers impairs.
Or (et non "hors" (comme je le vois trop souvent écrit)) il suffit que l'un des 2 entiers soit pair pour que leur produit le soit aussi!
Le produit de ces 2 entiers aléatoires est donc 3 fois plus souvent pair qu'impair!
On peut par ailleurs remarquer que, si les nombres premiers inférieurs à 400 sont susceptibles d'être tirés (lorsque l'un des 2 randoms est "1"), je ne vois pas très bien comment les nombres premiers supérieurs à 400 auraient la moindre chance d'être tirés!!!
Pour ma part (en temps que mathématicien chipoteur), je préfèrerais une formule du genre:
(($RANDOM%600)*600)+($RANDOM%500)
qui a l'avantage de permettre le tirage de tous les nombres entre 0 et 299999
tout en n'oubliant pas qu'il reste quand même un léger biais du fait que $RANDOM%600 n'est pas complètement uniforme sur [0 .. 599] (comme l'a très clairement indiqué Disedorgue post #15)
[/CHIPOTAGE]
Edit:
Oops! J'arrive un peu après la bataille (je n'avais pas vu qu'il y avait une 2ème page et j'ai donc zappé les messages #21 à #34...)
Partager