IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++/CLI Discussion :

2 questions pr�cises sur la fonction rand() [D�butant(e)]


Sujet :

C++/CLI

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    182
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 182
    Par d�faut 2 questions pr�cises sur la fonction rand()
    Bonsoir � toutes et � tous,

    J'ai 2 questions pr�cises sur la fonction rand():

    1) Je dois tirer un nombre important (disons entre 200,000 et une dizaine de millions) de nombres al�atoires compris entre [0, 1]: des r�els. J'ai trouv� en googlant une page qui d�taille pas mal la proc�dure pour tirer dans un intervalle, en particulier le code de GreyWolf: http://www.cplusplus.com/forum/beginner/7445/. Ma premi�re question, est-ce que ce type de code convient pour mon cas (grand nombre de tirages, s�curit� de l'al�atoire, rapidit�) ? A priori �a me semble plut�t pas mal, mais j'aimerais vos avis d'experts.

    2) Derni�re question, je d�bute en C++, et j'ai une classe dans laquelle j'ai diff�rentes m�thodes qui tirent al�atoirement. Ma question: ou et comment dois-je initialiser la graine? dois-je d�clarer une variable et le faire dans la constructeur? dois-je initialiser une graine dans chaque m�thode? bref quelle est la proc�dure la plus sure (pour avoir de l'al�atoire) et �ventuellement la plus rapide?

    Merci par avance pour vos retours,

    Gian

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Bonjour,

    le cas du rand a �t� maintes fois abord�s sur ces forums.
    Le principe est
    - seeder 1 et 1 seule fois
    - (float)rand() / (RAND_MAX) pour g�n�rer [0,1]

    Point de vue performance, de toutes fa�ons tu devras effectuer tes N appels � rand pour avoir N r�sultats. Et sur ce point je ne vois pas �norm�ment d'am�liorations possibles.
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2007
    Messages
    182
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : F�vrier 2007
    Messages : 182
    Par d�faut
    Merci pour ce retour �clair� et �clairant.
    Le seeder 1 et une seule fois vaut aussi pour les processus?

  4. #4
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Qu'entends-tu par processus ?

    Il faut initialiser la seed une seule fois par programme, en particulier si tu vas tirer plusieurs rand � la suite tr�s rapidement.

    rand est un "faux random" dans le sens o� il prend la valeur suivante � partir de la seed.
    Un exemple tr�s faux, admettons que tu aies la s�quence suivante apr�s seed
    5 2 4 0
    Si tu tires 4 rand � la suite, tu auras ces valeurs-l� dans cette ordre.
    Si maintenant tu seed sur time(NULL) (classiquement), avec la m�me s�quence, si tu rand/seed trop rapidement, tu pourras avec 4 rand/seed � la suite ne tirer que des 5 !
    Pensez � consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation r�seau ?
    Aucune aide via MP ne sera dispens�e. Merci d'utiliser les forums pr�vus � cet effet.

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 507
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 507
    Par d�faut
    rand g�n�re une s�rie de nombre pseudo-al�atoire.

    C'est � dire qu'un attaquant qui peut acc�der � un "grand" nombre des valeurs successives retourn�s par rand, comme les num�ros de s�quences des connections TCP, est capable de deviner � l'avance les prochaines valeurs retourn�es par rand.

    La fonction "rand" est compl�tement nulle d'un point de vue cryptographique.

    De plus, d'un point de vue statistique, la r�partition des valeurs retourn�es par rand n'est pas homog�ne. Des valeurs sortent bien plus souvent que d'autres. C'est donc pourri pour des m�thodes statistiques type Monte-Carlo.

    Vous ne pouvez faire que des programmes "jouets" avec rand. Mais je ne pense pas qu'on demande plus � un d�butant en C++.

  6. #6
    Membre confirm�
    Inscrit en
    Novembre 2010
    Messages
    176
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 176
    Par d�faut
    bonjour.

    ton projet consiste-t'il a utiliser la fonction rand()?

    ou la finalit� est-elle d'obtenir la s�rie de nombre al�atoire ?

    dans ce deuxi�me cas, les propri�t�s de ta s�rie de nombres (pseudo) al�atoires sont tr�s importantes.

    Boost et QuantLib ont des librairies/classes qui pourront t'int�resser.

    tu peux aussi jeter un oeil sur la s�rie "Random Review series: randomly reviewing snippets of published codes:" de B.Nikolic, disponible ici


Discussions similaires

  1. Questions pr�cises sur les relations
    Par chido dans le forum JPA
    R�ponses: 7
    Dernier message: 29/01/2014, 16h59
  2. Question pr�cise sur JNA
    Par astronomixlegaulois dans le forum Documents
    R�ponses: 1
    Dernier message: 28/04/2010, 12h00
  3. question pratique sur les fonctions 'inutiles'
    Par Plomeg dans le forum C++
    R�ponses: 13
    Dernier message: 20/11/2007, 19h58
  4. R�ponses: 3
    Dernier message: 23/08/2007, 00h39
  5. R�ponses: 2
    Dernier message: 21/12/2005, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo