
Envoyé par
stillman
Plutôt que 1 / rand(), qui peut aboutir à des divisions par zéro, je ferais plutôt rand() / RAND_MAX.
De plus, je n'arrive pas à mettre le doigt sur une explication, mais j'ai l'intutition que la distribution sera mieux respectée ainsi.
Sauf que RAND_MAX est... une constante (valant "typiquement" 255), et que, dés lors, si tu fait 1/RAND_MAX, tu auras beau le faire jusqu'à la nuit des temps, le résultat sera toujours identique
(et tu perd donc tout l'intérêt d'un éventuel appel à une méthode aléatoire)
Comme, de fait, il reste possible que rand() renvoie 0, il vaut alors mieux utiliser un code du genre de
float /* ou double */ value=(rand()==0 ? 1.0: 1.0/rand());
voire, car c'est aussi une possibilité (bien que cela implique potentiellement un décalage dans les valeurs)
float/* ou double */ value=1/rand()+1;
Partager