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++ Discussion :

Probléme avec RAND_MAX


Sujet :

C++

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Probléme avec RAND_MAX
    Bonjour,

    J'utilise GNU gcc sous linux et windows
    Sous linux j'ai RAND_MAX 2147483647
    Alors que sous windows ou j'utilise MinGW j'ai RAND_MAX=32767
    C'est vraiment un probléme pour moi parce que n'est pas le même comportement de mon code d'un systéme à l'autre
    Comment puis-je harmoniser mes codes
    Merci d'avance de votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Si tu veux faire du sérieux et portable, je te conseille [boost/std]::random.

    Elle peut paraître grosse au début, mais le programme d'exemple sur la page http://www.boost.org/doc/libs/1_48_0...st_random.html suffit généralement (avec en plus éventuellement la fonction seed pour reproduire la même séquence)
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Merci de votre suggestion, mais à la base j'ai juste besoin d'une sequence de 10 nombres différent et aléatoires. Je ne cherche pas des choses trés sofistiqués mais portable sous linux, mac et windows. Alors m'installer boost sur ces 3 platformes me parait trop lourd simplement pour ca.

    N'y a t -il pas moyen d'obliger par une option de compilation ou une directive à forcer le RAND_MAX en 16 bits. Je doute que l'on puisse faire changer celui de microsoft.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 082
    Billets dans le blog
    145
    Par défaut
    Bonjour,

    Je doute que la valeur de RAND_MAX est vraiment une importance. Je m'explique.
    Si sous Linux, la valeur est 2147483647 alors rand() retournera un nombre entre 0 et 2147483647.
    Si sous Windows, la valeur est 32767 alors rand() retournera un nombre entre 0 et 32767.
    Qu'est ce cela change ? Normalement rien. le résultat de rand()/static_cast<float>(RAND_MAX) sera toujours entre 0 et 1.

    Par contre, si vous utilisez RAND_MAX pour une autre raison, vous aurez possiblement des problèmes.

    La différence de valeur de RAND_MAX n'influera que sur la possible précision de la plage de valeur aléatoire. Mais bon, je pense que 1/32767, c'est déjà bien, non ?

    Ou alors, votre problème existe car vous voulez toujours générer les mêmes nombres ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Si ton compilo est récent, pas besoin de boost, c'est dans std::. Éventuellement, avec un compilo non récent mais pas trop vieux, std::tr1:: fourni aussi random. C'est dispo sous gcc comme sous visual C++.

    Et dans le cas contraire boost, ce n'est pas si lourd à installer, surtout que boost.random peut être header only, même pas besoin de la compiler. Et puis, avec des vieux compilos, avoir boost d'installé pour suppléer, ça ne fait pas de mal


    (LittleWhite : générer des nombres "aléatoires" prédéterminés et identiques d'une plateforme à l'autre peut simplifier des tests unitaires par exemple. Si c'est l'objectif, changer RAND_MAX ne résoudra rien, les algos sont probablement différents eux aussi...)
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  6. #6
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Merci de vos suggestion.

    Une remarque: D'un point de vue général avoir un RAND_MAX de 32767 n'est pas du tout équivalent à avoir 2147483647. En particulier du point de vue de la périodicité.

    Pour ma part, j'ai besoin d'otenir le même entier quelquesoit le systeme, donc je vais regarder du coté de boost comme suggéré.

    Merci

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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