A voir également:
- Trouver avec exactitude un nombre aléatoire..
- Trouver adresse mac - Guide
- Trouver un lieu avec coordonnées gps - Guide
- Trouver un film sans le titre - Télécharger - Divers TV & Vidéo
- En raison d'un nombre important d'échec de connexion snapchat - Forum Snapchat
- Comment trouver le mot de passe wifi sur son téléphone - Guide
4 réponses
Utilisateur anonyme
9 oct. 2009 à 23:42
9 oct. 2009 à 23:42
Salut,
L'aléatoire en C/C++ n'existe pas. En fait c'est un algorithme de génération de nombres pseudo-aléatoires qui sont liés les uns aux autres.
Donc un simple rand() renvoie toujours la même séquence. C'est pourquoi il faut utiliser srand() qui permet de trier ce tableau selon la graine (anglais->seed). Si tu mets une graine fixe tu auras encore et toujours la même séquence à chaque execution. L'intérêt de mettre la date,c'est qu'elle est toujours différente, sous Unix c'est le nombre de secondes depuis le 01/01/1970.
Pour actionscript et Java aucune idée =)
L'aléatoire en C/C++ n'existe pas. En fait c'est un algorithme de génération de nombres pseudo-aléatoires qui sont liés les uns aux autres.
Donc un simple rand() renvoie toujours la même séquence. C'est pourquoi il faut utiliser srand() qui permet de trier ce tableau selon la graine (anglais->seed). Si tu mets une graine fixe tu auras encore et toujours la même séquence à chaque execution. L'intérêt de mettre la date,c'est qu'elle est toujours différente, sous Unix c'est le nombre de secondes depuis le 01/01/1970.
Pour actionscript et Java aucune idée =)
Mais que renvoie exactement la fonction srand() alors?
comment l'ordinateur le calcule-t-il? (a partir de la date, oui, mais quelle formule utilise-t-il?)
voilà les questions que je me pose ^^
L'ordinateur utilise la date pour faire ses calculs. Mais si on effectue 2 fois la fonction srand() dans la même journée, on obtient malgré tout un résultat différent. Alors c'est basé sur les heures/minutes/secondes aussi?
Bref, j'aimerais bien comprendre en détail le fonctionnement de cette fonction =°
Si quelqu'un peut m'éclairer là-dessus, ca s'rait chouette :D
comment l'ordinateur le calcule-t-il? (a partir de la date, oui, mais quelle formule utilise-t-il?)
voilà les questions que je me pose ^^
L'ordinateur utilise la date pour faire ses calculs. Mais si on effectue 2 fois la fonction srand() dans la même journée, on obtient malgré tout un résultat différent. Alors c'est basé sur les heures/minutes/secondes aussi?
Bref, j'aimerais bien comprendre en détail le fonctionnement de cette fonction =°
Si quelqu'un peut m'éclairer là-dessus, ca s'rait chouette :D
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
10 oct. 2009 à 10:23
10 oct. 2009 à 10:23
Salut,
Mais que renvoie exactement la fonction srand() alors?
Rien. Le type de la fonction srand est void
Depuis man srand
La fonction srand() utilise son argument comme « graine » pour la génération d'une nouvelle séquence de nombres pseudo-aléatoires, qui seront fournis par rand(). Ces séquences sont reproductibles en appelant srand() avec la même valeur de graine.
Si aucune graine originale n'est fournie, la fonction rand() commence en utilisant la valeur 1.
Mais que renvoie exactement la fonction srand() alors?
Rien. Le type de la fonction srand est void
void srand(unsigned int seed);
Depuis man srand
La fonction srand() utilise son argument comme « graine » pour la génération d'une nouvelle séquence de nombres pseudo-aléatoires, qui seront fournis par rand(). Ces séquences sont reproductibles en appelant srand() avec la même valeur de graine.
Si aucune graine originale n'est fournie, la fonction rand() commence en utilisant la valeur 1.
Utilisateur anonyme
10 oct. 2009 à 10:33
10 oct. 2009 à 10:33
Comme je l'ai dis, la fonction time() renvoie le nombre de secondes écoulées depuis le 01/01/1970, donc à chaque seconde de la journée le résultat est différent !!
La fonction rand() retourne un nombre pseudo-aléatoire compris entre 0 et 32767 (= constante RAND_MAX définie dans le fichier stdlib.h).
Ces nombres sont dits pseudo-aléatoires parce que, a priori, ils semblent aléatoires mais en fait ils sont calculés à partir d'un nombre de départ que l'on appelle la graine et qui démarre toujours à la même valeur (1) ce qui fait que l'on obtient toujours la même série de nombres "aléatoires" à chaque exécution.
Il existe donc la fonction srand() qui permet d'initialiser la fameuse graine de départ.
L'algorithme de rand est :
Pour les opérateurs de cette fonction => https://www.commentcamarche.net/contents/191-langage-c-les-operateurs
Donc tu vois l'importance de cette graine !
Source : https://minnie.tuhs.org/cgi-bin/utree.pl
La fonction rand() retourne un nombre pseudo-aléatoire compris entre 0 et 32767 (= constante RAND_MAX définie dans le fichier stdlib.h).
Ces nombres sont dits pseudo-aléatoires parce que, a priori, ils semblent aléatoires mais en fait ils sont calculés à partir d'un nombre de départ que l'on appelle la graine et qui démarre toujours à la même valeur (1) ce qui fait que l'on obtient toujours la même série de nombres "aléatoires" à chaque exécution.
Il existe donc la fonction srand() qui permet d'initialiser la fameuse graine de départ.
L'algorithme de rand est :
static long randx = 1; srand(x) unsigned x; { randx = x; } rand() { return(((randx = randx*1103515245 + 12345)>>16) & 077777); }
Pour les opérateurs de cette fonction => https://www.commentcamarche.net/contents/191-langage-c-les-operateurs
Donc tu vois l'importance de cette graine !
Source : https://minnie.tuhs.org/cgi-bin/utree.pl
10 oct. 2009 à 00:50