begin process at 2012 05 29 00:46:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Comment générer de très grand nombres aléatoires?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment générer de très grand nombres aléatoires?

jeudi 30 décembre 2004 à 19:01:28 | Comment générer de très grand nombres aléatoires?

Erebus

Bonjour!

J'ai un petit problème pour générer de grands nombres de manière aléatoire. J'utilise une portion d'un code-source posté sur ce site, mais les résultats sont inattendus, soit j'obtiens des nombres négatifs, soit j'obtiens (en bidouillant un peu sur les types de données et les signes) des nombres 10 000 fois trop grands .

J'aurai besoin de générer des nombres compris entre deux bornes (minimal, et maximal), mais il y a plusieurs centaines de milliers entre les deux bornes ; par exemple entre 0 et 6 556 016 en début de programme puis l'écart s'élargit au fur et à mesure que le programme tourne (je créé un programme de modélisation d'une population importante - les turcs! - et je dois bientot rendre mon projet).

J'avais penser générant plusieurs fois des nombres aléatoires sur des bornes moins espacés (additionner les 6 556 016 nombres aléatoire générés avec comme bornes 0 et 1), mais cela ne devient plus un nombre aléatoire mais une moyenne à cause de la Loi des grands nombres.

Pourrait-on m'aider, s'il-vous-plait ?...
merci
jeudi 30 décembre 2004 à 19:54:07 | Re : Comment générer de très grand nombres aléatoires?

Gendal67


Euh, moi j'ai une tite solution, une fonction que j'ai crée moi même et que j'utilise quand j'ai besoin de nombres aléatoire quelconque...
la voici :



DWORD GetRandomValue(DWORD dwMaxValue) {

if ((dwMaxValue % GetTickCount()) == 0)
return dwMaxValue;

return GetRandomValue(dwMaxValue - 1);
}





Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
jeudi 30 décembre 2004 à 20:08:59 | Re : Comment générer de très grand nombres aléatoires?

vecchio56

Administrateur CodeS-SourceS
'nombres aléatoire quelconque'
oui quelconque, c'est justement le but, je me demande ce que seraient des nombres aléatoires non quelconques


2^32, ce n'est pas un très grand nombre ca...
jeudi 30 décembre 2004 à 20:28:52 | Re : Comment générer de très grand nombres aléatoires?

plus_plus_fab

Réponse acceptée !
salut,

pour les nombres aléatoires, double(rand()) / RAND_MAX produit un nombre aléatoire entre 0 et 1. Apres tu multiplies, tu ajoutes pour cadrer la plage de nombre voulue.
int srand(int) pour initaliser.
Pour aller plus loin, voir la librairie boost qui propose de bons générateurs aléatoires.
jeudi 30 décembre 2004 à 20:36:35 | Re : Comment générer de très grand nombres aléatoires?

Gendal67


vecchio> c'est 2^32 - 1 je crois plutot...et d'après la plage de nombres qu'il a donné en haut (regarde bien) : 0 à 6 556 016, ça colle sans probleme (un DWORD pouvant stocker des valeurs allant de 0 à 4 294 967 295)...

plus_plus_fab> bonne idée.....mais quelle est la précision retournée par rand() ? Parce que multiplier par un nombre la valeur retournée, c'est ingénieux si la précision est bonne, sinon cela ôte des possibilités...

ex :

rand() retourne 1.25 et double() multiplie par 1000, ça donne 1250 ... et là, comme la précision est mauvaise, la perte est importante car tu ne peux obtenir 1251, 1252, 1253, 1524, 1255, etc...

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
jeudi 30 décembre 2004 à 20:39:03 | Re : Comment générer de très grand nombres aléatoires?

Gendal67


vecchio> ''nombres aléatoire quelconque << oui, lol, désolé, j'ai ecore dit uen connerie ^^.... on va dire que "quelconque" signifie, "dans une plage donnée" ^^

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
jeudi 30 décembre 2004 à 22:16:17 | Re : Comment générer de très grand nombres aléatoires?

plus_plus_fab

rand();retourne un int entre 0 et RAND_MAX (défini par l'implémentation)
ensuite on caste avec le type double, puis la division par RAND_MAX produit aussi un double. Donc au final, on a un double.
La précision d'un double est connu, et a jesaispluscombien de chiffres significatifs, donc il ne faut pas aller au de la de la précision d'un double.
Il y a long double, qui est un peu plus grand au cas ou ...
vendredi 31 décembre 2004 à 10:59:26 | Re : Comment générer de très grand nombres aléatoires?

Erebus

merci déjà pour ces réponses.

Je voulais juste savoir avant de modifier l'ensemble de mon programme (qui fait quand même 1000 lignes sans compter les commentaire!), si la première solution postée par Gendal67 n'est pas un peu risquée?

Je sais que je ne connais pas grand chose à la programmation car je débute, (si j'ai pigé de travers, alors dsl!), mais est-ce que cela ne risque pas de surcharger la mémoire? Car il semble que ce soit une fonction récursive (encore dsl si je me plante!) et si je veux générer un nombre en 0 et 6 556 016 combien de fois sera appelée la fonction GetRandomValue(DWORD dwMaxValue)?

si je me trompe merci de me le dire et alors j'appliquerai cette solution.
vendredi 31 décembre 2004 à 11:49:16 | Re : Comment générer de très grand nombres aléatoires?

Gendal67


Euh si, exactement en fait! ça risque de tourner un bon moment ^^ prend la méthode de plus_plus_fab ;) bonne journée

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
vendredi 31 décembre 2004 à 12:07:14 | Re : Comment générer de très grand nombres aléatoires?

Erebus

Et bien tout marche impécable (la perte de données n'est pas importante dans mon cas) !

Merci pour tout!


Cette discussion est classée dans : générer, nombres, bornes, grands, aléatoires


Répondre à ce message

Sujets en rapport avec ce message

générer des nombres aléatoires [ par mabrouka ] Bonjour tout le monde , voici mon problème : je veux générer un ensemble de nombres aléatoires compris entre 0 et 1 en utilisant Générateur de type Mu générer des nombres [ par norton ] bonjour,j'ai un problème j'ai cheché dans les sources sur ce site quelque chose qui pourai m'aider mais certaines sources sont trop compexe pour moi,j Multiplication de grands nombres [ par zekicker ] Salut,Je voudrais savoir si qq1 connait une méthode pour effectuer une multiplication de grands nombres comme 467684700 *655000000. En effet, j'obtien traviller avec de grands nombres [ par alfred289 ] est-ce que quelqu'un aurait une façon simple de travailler avec de très grands nombres ( des miliers de chiffres par exemple) nombres aléatoires en c++ [ par johanb ] bonjour a tous, voici mon problême.Dans un programme, je dois générer deux fois un nombre aléatoire entre 0 et n (appelé max dans le programme). Voici Nombres aléatoires et probabilités [ par Jepissedroitmoi ] Salut !J'aurai besoin de générer des nombres aléatoires mais selon une loi de probabilité pour un jeu que je suis entrain de développer avec un collèg class pour manipuler des grands nombres [ par Orkblutt ] Salut,j'aimerai implementer une classe qui me permettrai de manipuler (+,-, /,*,%) des grands nombres (Nb>32bits) mais je ne sais pas du tout comment Les nombres aléatoires en C++ (Visual C++ 6.0) [ par Yabo ] Tout d'abord voilà le code :CODE #include #include #include #include using namespace std;void animstartscreen() { int n librairie grands nombres ^ [ par coucou747 ] Je dévelope en ce moment une librairie qui me permetrais de gérer des nombres de 1024 bits..Je ne fais que du C... Voici la sctructure qui contiendra combinaisons avec des grands nombres [ par marieinthesky ] Bonjour,j'ai besoin de calculer des arrangements et des combinaisons avec des nombres assez grands, tous mes essais de programmes marchent sur des pe


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales