La fonction rand
Fermé
FirstSalem
-
29 janv. 2013 à 23:01
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 31 janv. 2013 à 03:27
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 31 janv. 2013 à 03:27
A voir également:
- La fonction rand
- Fonction si et - Guide
- Fonction moyenne excel - Guide
- Fonction somme excel - Guide
- Excel remplir automatiquement une cellule en fonction d'une autre ✓ - Forum Excel
- Fonction remplacer word - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 29/01/2013 à 23:14
Modifié par KX le 29/01/2013 à 23:14
Il se trouve que rand() est un nombre compris entre 0 et RAND_MAX.
Donc quelque soit i, tu auras toujours au maximum k=RAND_MAX.
Or RAND_MAX vaut généralement 32767 (parfois plus), ce qui explique pourquoi tu n'obtiens que des valeurs de l'ordre de 10000, 20000, et au maximum 32767.
Remarque 1 : ton i est totalement inutile ici, vu qu'il est supérieur à RAND_MAX.
Remarque 2 : boucler 100 fois est insuffisant pour tirer une généralité sur un tirage aléatoire.La confiance n'exclut pas le contrôle
Donc quelque soit i, tu auras toujours au maximum k=RAND_MAX.
Or RAND_MAX vaut généralement 32767 (parfois plus), ce qui explique pourquoi tu n'obtiens que des valeurs de l'ordre de 10000, 20000, et au maximum 32767.
Remarque 1 : ton i est totalement inutile ici, vu qu'il est supérieur à RAND_MAX.
Remarque 2 : boucler 100 fois est insuffisant pour tirer une généralité sur un tirage aléatoire.La confiance n'exclut pas le contrôle
que faire alors ?
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 29/01/2013 à 23:28
Modifié par KX le 29/01/2013 à 23:28
Tu peux tirer deux nombres aléatoires A et B, et calculer (RAND_MAX+1)*A+B.
Ça te générera alors un nombre entre 0 et (RAND_MAX+1)²-1 pour lequel i sera inférieur.
Remarque : Il faudrait vérifier mathématiquement que l'équiprobabilité est bien respectée (elle ne l'est pas par exemple sur un calcul de type A*B, mais comme ça je pense que c'est correct)
Ça te générera alors un nombre entre 0 et (RAND_MAX+1)²-1 pour lequel i sera inférieur.
k=((RAND_MAX+1)*rand()+rand()) % i) + 1;
Remarque : Il faudrait vérifier mathématiquement que l'équiprobabilité est bien respectée (elle ne l'est pas par exemple sur un calcul de type A*B, mais comme ça je pense que c'est correct)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
31 janv. 2013 à 00:07
31 janv. 2013 à 00:07
i/100 vaut 0. De plus il ne faut pas utiliser le modulo avec rand() pour assurer l'équiprobabilité. Donc assurément non !
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
31 janv. 2013 à 00:26
31 janv. 2013 à 00:26
Pour ma part, quand je parlais d'assurer l'équiprobabilité je pensais uniquement à la partie (RAND_MAX+1)*rand()+rand(), il est évident qu'il y a un biais avec le %i et que les probabilité d'avoir i-1 sont moindres que les autres, mais c'est également le cas avec le rand() tout seul...