Donc le code suivant fait 0 < r < 1
r = ((double) rand() / (RAND_MAX))
Pourquoi le fait d'avoir r = ((double) rand() / (RAND_MAX + 1))
faire -1 < r < 0 ?
Le fait d'ajouter un à RAND_MAX ne devrait-il pas rendre 1 < r < 2 ?
Edit : Je recevais un avertissement : dépassement d'entier dans l'expression
sur cette ligne, donc ça pourrait être le problème. Je viens de faire cout << r << endl
et cela me donne définitivement des valeurs entre -1 et 0
2 votes
Essayez d'ajouter
1
après le dernier)
15 votes
Notez que vous devez utiliser distribution_réelle_uniforme de toute façon pour ça. Si vous n'avez pas C++11, utilisez la fonction version améliorée .
0 votes
Erreur d'algèbre. Si
r
est un nombre aléatoire dans l'intervalle de zéro àm
alors le rapportr/m
sera dans l'intervalle(0,1)
peror/(m+1)
sera dans l'intervalle(0, m/(m+1))
PAS la gamme(1,2)
. Sim
est très grand (par rapport à un), alorsm/(m+1)
est approximativement égal à un, donc votre expressionr = ((double) rand() / (RAND_MAX + 1))
donnerait un nombre aléatoire approximativement dans l'intervalle (0,1) - c'est-à-dire, s'il n'y avait pas de débordement.