En C,quand on utilise la fonction rand( ) elle doit =EAtre utilis=E9e avec
la fonction srand( ) de mani=E8re lors de chaque ex=E9cution du programme,
rand( ) ne donne pas le m=EAme nombre al=E9atoire.
Ma question est:
pourquoi au cours d'une et une seule ex=E9cution du programme,m=EAme apr=E8s
avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans
une m=EAme fonction(par exemple tirage de plusieurs nombres
al=E9atoires),=E7a ne donne pas le m=EAme nombre al=E9atoire?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Eric Levenez
Le 27/02/07 16:54, dans , « prat » a écrit :
En C,quand on utilise la fonction rand( ) elle doit être utilisée avec la fonction srand( ) de manière lors de chaque exécution du programme, rand( ) ne donne pas le même nombre aléatoire.
Oui.
Ma question est: pourquoi au cours d'une et une seule exécution du programme,même après avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans une même fonction(par exemple tirage de plusieurs nombres aléatoires),ça ne donne pas le même nombre aléatoire?
La norme indique que pour une même graine passée à srand, la suite de nombre pseudo-aléatoire retournée par rand est identique. Le comportement que tu décris est non conforme.
Montre le code qui te fait ce problème. Indique quelle plateforme tu utilises, quelle version de compilateur et comment tu compiles.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 27/02/07 16:54, dans
<1172591670.120285.130890@a75g2000cwd.googlegroups.com>, « prat »
<nki-76nf@iximail.com> a écrit :
En C,quand on utilise la fonction rand( ) elle doit être utilisée avec
la fonction srand( ) de manière lors de chaque exécution du programme,
rand( ) ne donne pas le même nombre aléatoire.
Oui.
Ma question est:
pourquoi au cours d'une et une seule exécution du programme,même après
avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans
une même fonction(par exemple tirage de plusieurs nombres
aléatoires),ça ne donne pas le même nombre aléatoire?
La norme indique que pour une même graine passée à srand, la suite de nombre
pseudo-aléatoire retournée par rand est identique. Le comportement que tu
décris est non conforme.
Montre le code qui te fait ce problème. Indique quelle plateforme tu
utilises, quelle version de compilateur et comment tu compiles.
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
En C,quand on utilise la fonction rand( ) elle doit être utilisée avec la fonction srand( ) de manière lors de chaque exécution du programme, rand( ) ne donne pas le même nombre aléatoire.
Oui.
Ma question est: pourquoi au cours d'une et une seule exécution du programme,même après avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans une même fonction(par exemple tirage de plusieurs nombres aléatoires),ça ne donne pas le même nombre aléatoire?
La norme indique que pour une même graine passée à srand, la suite de nombre pseudo-aléatoire retournée par rand est identique. Le comportement que tu décris est non conforme.
Montre le code qui te fait ce problème. Indique quelle plateforme tu utilises, quelle version de compilateur et comment tu compiles.
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Jacques VALLOIS
Eric Levenez déclara le mardi 27 février 2007 18:38 dans fr.comp.lang.c :
Ma question est: pourquoi au cours d'une et une seule exécution du programme,même après avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans une même fonction(par exemple tirage de plusieurs nombres aléatoires),ça ne donne pas le même nombre aléatoire?
La norme indique que pour une même graine passée à srand, la suite de nombre pseudo-aléatoire retournée par rand est identique. Le comportement que tu décris est non conforme.
Attention, il me semble que la question est pourquoi plusieurs appels successifs de rand() au sein du même programme lors de la même exécution ne donne pas le même nombre aléatoire !
C'est tout à fait normal ! srand génère une suite de nombres aléatoires à l'aide de la graine et la fonction rand() vient ensuite piocher dans cette suite pour simuler des tirages aléatoires.
Cordialement, -- Jacques VALLOIS "Notre science est primitive et enfantine, mais c'est notre bien le plus précieux." (Albert Einstein)
Eric Levenez déclara le mardi 27 février 2007 18:38 dans
fr.comp.lang.c :
Ma question est:
pourquoi au cours d'une et une seule exécution du programme,même
après avoir introduit srand( ),quand on utlilise plusieurs fois rand(
) dans une même fonction(par exemple tirage de plusieurs nombres
aléatoires),ça ne donne pas le même nombre aléatoire?
La norme indique que pour une même graine passée à srand, la suite de
nombre pseudo-aléatoire retournée par rand est identique. Le
comportement que tu décris est non conforme.
Attention, il me semble que la question est pourquoi plusieurs appels
successifs de rand() au sein du même programme lors de la même
exécution ne donne pas le même nombre aléatoire !
C'est tout à fait normal ! srand génère une suite de nombres aléatoires
à l'aide de la graine et la fonction rand() vient ensuite piocher dans
cette suite pour simuler des tirages aléatoires.
Eric Levenez déclara le mardi 27 février 2007 18:38 dans fr.comp.lang.c :
Ma question est: pourquoi au cours d'une et une seule exécution du programme,même après avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans une même fonction(par exemple tirage de plusieurs nombres aléatoires),ça ne donne pas le même nombre aléatoire?
La norme indique que pour une même graine passée à srand, la suite de nombre pseudo-aléatoire retournée par rand est identique. Le comportement que tu décris est non conforme.
Attention, il me semble que la question est pourquoi plusieurs appels successifs de rand() au sein du même programme lors de la même exécution ne donne pas le même nombre aléatoire !
C'est tout à fait normal ! srand génère une suite de nombres aléatoires à l'aide de la graine et la fonction rand() vient ensuite piocher dans cette suite pour simuler des tirages aléatoires.
Cordialement, -- Jacques VALLOIS "Notre science est primitive et enfantine, mais c'est notre bien le plus précieux." (Albert Einstein)
Antoine Leca
prat wrote:
En C,quand on utilise la fonction rand( ) elle doit être utilisée avec la fonction srand( ) de manière lors de chaque exécution du programme, rand( ) ne donne pas le même nombre aléatoire.
En fait, *si* tu veux que la série fournie par les appels successifs à rand() ne se répète pas, *alors* tu dois utiliser srand(graine) (avec une graine aléatoire ou pseudo-aléatoire).
Par contre, *si* tu veux avoir de nouveau la même série, il suffit de faire un nouvel appel à srand() avec la même graine que précédemment ; l'intérêt ici est la reproductibilité.
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Ma question est: pourquoi au cours d'une et une seule exécution du programme,même après avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans une même fonction(par exemple tirage de plusieurs nombres aléatoires),ça ne donne pas le même nombre aléatoire?
Cela doit donner la même série, mais les éléments de la série sont différents (normalement, répartis de manière aléatoire entre 0 et RAND_MAX.)
Antoine
prat wrote:
En C,quand on utilise la fonction rand( ) elle doit être utilisée avec
la fonction srand( ) de manière lors de chaque exécution du programme,
rand( ) ne donne pas le même nombre aléatoire.
En fait, *si* tu veux que la série fournie par les appels successifs à
rand() ne se répète pas, *alors* tu dois utiliser srand(graine) (avec une
graine aléatoire ou pseudo-aléatoire).
Par contre, *si* tu veux avoir de nouveau la même série, il suffit de faire
un nouvel appel à srand() avec la même graine que précédemment ; l'intérêt
ici est la reproductibilité.
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut
pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Ma question est:
pourquoi au cours d'une et une seule exécution du programme,même après
avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans
une même fonction(par exemple tirage de plusieurs nombres
aléatoires),ça ne donne pas le même nombre aléatoire?
Cela doit donner la même série, mais les éléments de la série sont
différents (normalement, répartis de manière aléatoire entre 0 et RAND_MAX.)
En C,quand on utilise la fonction rand( ) elle doit être utilisée avec la fonction srand( ) de manière lors de chaque exécution du programme, rand( ) ne donne pas le même nombre aléatoire.
En fait, *si* tu veux que la série fournie par les appels successifs à rand() ne se répète pas, *alors* tu dois utiliser srand(graine) (avec une graine aléatoire ou pseudo-aléatoire).
Par contre, *si* tu veux avoir de nouveau la même série, il suffit de faire un nouvel appel à srand() avec la même graine que précédemment ; l'intérêt ici est la reproductibilité.
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Ma question est: pourquoi au cours d'une et une seule exécution du programme,même après avoir introduit srand( ),quand on utlilise plusieurs fois rand( ) dans une même fonction(par exemple tirage de plusieurs nombres aléatoires),ça ne donne pas le même nombre aléatoire?
Cela doit donner la même série, mais les éléments de la série sont différents (normalement, répartis de manière aléatoire entre 0 et RAND_MAX.)
Antoine
Mihamina (R12y) Rakotomandimby
Antoine Leca wrote:
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez: Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires? Merci.
Antoine Leca wrote:
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut
pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez:
Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires?
Merci.
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez: Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires? Merci.
Sylvain
Mihamina (R12y) Rakotomandimby wrote on 09/03/2007 22:56:
Antoine Leca wrote:
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez:
plutôt qu'il "l"'a mal dit; un "vrai", un "faux" ne décrive pas grand chose de factuel (ni formelle)
Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires?
pour obtenir des nombres qui satisfont à, par exemple, les critères d'une spécification telle FIPS 140, on choisi une implémentation certifiée FIPS 140; pour obtenir des nombres "juste pas toujours pareil" sans se soucier de la homogénéité (de leur fréquence), ni de leur prédictibilité, on peut utiliser rand().
Sylvain.
Mihamina (R12y) Rakotomandimby wrote on 09/03/2007 22:56:
Antoine Leca wrote:
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut
pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez:
plutôt qu'il "l"'a mal dit; un "vrai", un "faux" ne décrive pas grand
chose de factuel (ni formelle)
Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires?
pour obtenir des nombres qui satisfont à, par exemple, les critères
d'une spécification telle FIPS 140, on choisi une implémentation
certifiée FIPS 140; pour obtenir des nombres "juste pas toujours pareil"
sans se soucier de la homogénéité (de leur fréquence), ni de leur
prédictibilité, on peut utiliser rand().
Mihamina (R12y) Rakotomandimby wrote on 09/03/2007 22:56:
Antoine Leca wrote:
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez:
plutôt qu'il "l"'a mal dit; un "vrai", un "faux" ne décrive pas grand chose de factuel (ni formelle)
Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires?
pour obtenir des nombres qui satisfont à, par exemple, les critères d'une spécification telle FIPS 140, on choisi une implémentation certifiée FIPS 140; pour obtenir des nombres "juste pas toujours pareil" sans se soucier de la homogénéité (de leur fréquence), ni de leur prédictibilité, on peut utiliser rand().
Sylvain.
Antoine Leca
Mihamina (R12y) Rakotomandimby wrote:
Antoine Leca wrote:
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez:
Je n'en dis pas assez car le contexte donné par le message original ne donne pas beaucoup d'informations siur les finalités recherchées. De plus il semble que ma réponse ait suffit, ne t'en déplaise.
Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires? Merci.
Peux-tu préciser ta question ? en particulier le champ d'application.
Antoine
Mihamina (R12y) Rakotomandimby wrote:
Antoine Leca wrote:
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il
ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez:
Je n'en dis pas assez car le contexte donné par le message original ne donne
pas beaucoup d'informations siur les finalités recherchées. De plus il
semble que ma réponse ait suffit, ne t'en déplaise.
Qu'est-ce qui est donc fait pour générer des nombres
(pseudo-)aléatoires? Merci.
Peux-tu préciser ta question ? en particulier le champ d'application.
Si tu veux un « vrai » générateur de nombres pseudo-aléatoires, il ne faut pas utiliser rand() et srand(), ce n'est pas fait pour cela.
Comme tu n'en a pas dis assez:
Je n'en dis pas assez car le contexte donné par le message original ne donne pas beaucoup d'informations siur les finalités recherchées. De plus il semble que ma réponse ait suffit, ne t'en déplaise.
Qu'est-ce qui est donc fait pour générer des nombres (pseudo-)aléatoires? Merci.
Peux-tu préciser ta question ? en particulier le champ d'application.