
Envoyé par
Jean-Marc.Bourguet
Un gros probleme: le passage de double a int tronque, donc index ne vaudra N-1 que si rand() retourne RAND_MAX.
Un petit probleme (du moins pour des valeurs de N petites par rapport a RAND_MAX): si N ne divise pas RAND_MAX+1, il y a certaines valeurs qui sont retournees plus souvent que d'autres.
Je me permets de reciter
http://www.bourguet.org/cpp/random.pdf
ou j'ai decris ce qui me semble la meilleure maniere d'eviter tout les petits et gros problemes quand on veut reduire l'intervalle.
Certes, je suis entièrement d'accord et j'ai lu ton pdf qui est très bon. Mais je faisais remarquer que le code :
index = (int)(rand() / RAND_MAX * (N - 1));
est faux puisque rand() retourne un entier qui, divisé par RAND_MAX, vaudra toujours 0 ou 1 (division entière) et c'est donc pas ce que voulait l'auteur...
Ensuite, pour avoir une bonne répartition, un vrai générateur de nombre aléatoire correct, c'est évident que ce n'est pas comme cela qui faudrait s'y prendre...
Jc
Partager