Génération d'un nombre aléatoire entre 0 et 2^31-1 sous Visual C++ 6.0 - C++ - Programmation
Marsh Posté le 22-02-2005 à 15:25:57
il faut soit que tu utilise une bibliothèque extérieure, soit que tu écrives un vrai générateur aléatoire toi même.
RAND_MAX est invaraible sur ton système
et
(RAND_MAX+1)*rand() + rand() est la pire des solutions, rand_i() et rand_i+1() étant très fortemenent lié (rand_i+1() est obtenu en fonction de rand_i())
Marsh Posté le 22-02-2005 à 15:32:52
OK
(RAND_MAX+1)*rand() + rand() est la pire des solutions, rand_i() et rand_i+1() étant très fortemenent lié (rand_i+1() est obtenu en fonction de rand_i())
=> En fait, je crois que c'est plus compliqué car on doit également considérer les entiers i-1, i-2 ... Mais il existe certainement un biais non nul entre les deux valeurs.
IL faudrait, à la rigueur, calculer l'importance de ce biais avant d'utiliser ce genre de commande.
Ma question était principalement sur la possibilité de modifier RAND_MAX. Merci de ta réponse.
Marsh Posté le 22-02-2005 à 15:36:26
[quote=989913,0,3,148002] En fait, je crois que c'est plus compliqué car on doit également considérer les entiers i-1, i-2 ... Mais il existe certainement un biais non nul entre les deux valeurs.
[/quote]ne compte pas dessus, la pluspart des implémentation, c'est du genre
next = last * X + Y;
last = next;
return next;
Marsh Posté le 22-02-2005 à 16:38:16
Oui, mais j'ai fait le test (au moins sous g++ 3.3.2). Avec ce compilateur la méthode rand() doit être plus évoluée car lorsque deux valeurs identiques sortent lors de deux appels distincts, les valeurs suivantes sont cependant différentes.
Apparemment la méthode rand() a évolué depuis les premières implémentations qui devaient se baser sur des formules du type de celle que tu donnes.
Marsh Posté le 22-02-2005 à 16:52:09
Oui, mais ca ne dit pas grand chose de l'implémentation de ces fonctions. On a juste un renvoi vers le Num. Rec. pour plus d'infos.
Marsh Posté le 22-02-2005 à 15:11:06
Bonjour,
j'ai déja posé des questions très similaires sur ce forum mais je rencontre toujours les mêmes difficultées à utiliser Visual C++ 6.0.
Actuellement, j'utilise la fonction rand() pour générer des entiers aléatoires (pseudo-aléatoires pour les puristes) entre 0 et 32767, la valeur de RAND_MAX dans mon compilateur. Or, cela ne me suffit pas, car je voudrais pouvoir aller jusqu'à 2147483647 pour RAND_MAX (valeur de 2^31-1).
Ma question est donc de savoir s'il existe dans Visual C++ 6.0 une option de compilation permettant de changer RAND_MAX pour générer des nombres sur un interval plus important.
Autre méthode, prendre (RAND_MAX+1)*rand() + rand() comme nombre. Mais cette méthode ne me parait pas propre.
Merci de votre aide !