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 :

générer nombre réel entre 0 et 1


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut générer nombre réel entre 0 et 1
    Bonsoir,

    Je me demandais comment générer un nombre réel entre 0 et 1 ?

    J'utilisais toujours rand pour des entiers mais la pour des réels y a-t-il une autre fonction ? j'ai entendu parlé de random ?


    Merci
    ++

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Salut,

    Comme il n'y a pas de type Réel en C (d'ailleurs, il n'y en a dans aucun langage (ce n'est toujours qu'une restriction, ce qui est normal)), je vais te donner une technique pour générer un "Réel" entre 0 et 1 suivant l'implémentation que tu as choisi.

    Donc, on dispose d'une fonction alea qui permet de générer un entier entre 0 et n.

    Par exemple celle obtenu dans la FAQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int alea(int n) 
    {
       int partSize   = (n == RAND_MAX) ?        1 : 1 + (RAND_MAX - n)/(n+1);
       int maxUsefull = partSize * n + (partSize-1);
       int draw;
     
       do
       {
          draw = rand();
       } while (draw > maxUsefull);
       return draw/partSize;
    }
    Il suffit de ramener la valeur entre 0 et n entre 0 et 1 par une homothétie.

    Et on trouve donc : alea(n) / n (la division correspond à la division permis par ton objet).

    La grandeur de n va changer la précision que tu auras, par exemple, si n = 10, tu auras une précision de 0.1 entre tes éléments. Il suffit donc d'ajuster pour avoir la précision que tu veux (n = 10^p pour une précision de 0.1^p).

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par italiasky
    Je me demandais comment générer un nombre réel entre 0 et 1 ?
    Je ne vois pas trop le problème Si tu veux un nombre en 0 et 1 avec une précision de 0.1, il faut donc 10 valeurs de 0.0 à 0.9, soit (0 à 9) / 10. En quoi est-ce une difficulté ? La plage dépend de la précision désirée.. Pour 0.01 à 0.99, à l'évidence, il fait une plage de (0 à 99) / 100 etc. Je te laisse faire le calcul...

    Rien de ceci n'a a voir avec le langage C. Simple problème d'arithmétique élémentaire... Le niveau de calcul est si bas que ça dons notre beau pays ?

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Le niveau de calcul est si bas que ça dons notre beau pays ?
    C'est bon je ne suis pas bête non plus... Je savais très bien faire comme ca mais si j'ai demandé c'est parce que un ami m'a parlé de srandom et qu'il a fait comme ci-dessous et qu'on a bien des nombres réels entre 0 et 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    srandom();
    random()/(float)RAND_MAX;
    Et que je comprenais pas le RAND_MAX etc... vu qu'il n'est défini nul part !


    Bref voilà, c'est tout, je voulais juste savoir s'il y avait quelque chose de spécifique pour générer ce genre de nombre en C.

    Et oui, même si je ne suis pas un génie en maths, je ne suis pas non plus un âne...

    Bonne journée...

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par italiasky
    Et que je comprenais pas le RAND_MAX etc... vu qu'il n'est défini nul part !
    C'est dans la norme.

    http://www.open-std.org/jtc1/sc22/wg...docs/n1124.pdf

    Sinon, il est bon d'avoir une documentation de référence...

    K&R2 Page 257 : <stdlib.h>

    Au fait, le C ne définit que srand() et rand(), mais ceci peut aider...

    http://emmanuel-delahaye.developpez....d/inc/random.h

Discussions similaires

  1. [XL-2010] Générer un nombre aléatoire entre 1 et 9999
    Par GADENSEB dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 31/08/2014, 10h48
  2. Générer un nombre réel
    Par HackerNet dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 19/06/2013, 23h32
  3. Réponses: 4
    Dernier message: 09/11/2012, 13h56
  4. Comment générer des nombres reéls aléatoires ?
    Par rzmadjid dans le forum Langage
    Réponses: 16
    Dernier message: 21/02/2008, 17h14
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

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