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 :

Convertir random en float


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Par défaut Convertir random en float
    bonsoir à tout le monde ,
    je cherche à appeler des fonctions par pointeur seulement j'ai eu quelques complications. Apparemment ça vient du générateur de valeur . J'ai bricolé pour avoir des valeurs Float en faisant int/int. Voilà le programme.
    Merci d'avance pour votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include <stdlib.h>            /* les bibliotheques stdlib.h et time.h sert à utiliser la fonction "randomize"*/
    #include <stdio.h>
    #include <time.h>
    float Max(float *t,int n)             /* la fonction Max qui recherche le maximum dun tableau */
    {
    	float m=t[0];
    	for (int i=0;i<n;i++)
    		if (t[i]<m)
    			m=t[i];
    	return m;
    }
    float Somme(float *t,int n)
    {  float s=t[0];
    	for (int i=0;i<n;i++)
    		s=s+t[i];
    	return s;
    }
    float Produit(float *t,int n)
    {  float p=1;
    	for (int i=0;i<n;i++)
    		p=p*t[i];
    	return p;
    }
    float Moyenne(float *t,int n)
    {  float m=t[0];
    	for (int i=0;i<n;i++)
    		m=m+t[i];
    	return (m/n);
    }
    int main()
    {  randomize();
    	float t[100],i,n;
    	printf("donner la taille du vecteur \n");
    	scanf("%d",&n);
    	for (i=0;i<n;i++)
    		t[i]=1.5+(rand()%10/(rand()%5+1.0));
    	printf("le tableau est \n");
    	for (i=0;i<n;i++)
    		printf("%.2f\t",t[i]);
    	printf("la somme est %.2f le max %.2f le produit %.2f la moyenne %.2f\n",Somme(t,n),Max(t,n),Produit(t,n),Moyenne(t,n));
    	float (*r[4])(float *,int)={Max,Somme,Produit,Moyenne};
    	puts("Donner loperation que vous voulez faire\n");
    	scanf("%d",&i);
    	float R=(*r[i-1])(i);
    	printf("Le resultat est R=%.2f\n",R);
    	return 0;
    }

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 119
    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 119
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    La réponse a été donnée sur le chat, je prends le courage de la remettre ici.

    Pour généré un nombre entre 0 et 1 (en float):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float var = rand()/(RAND_MAX+1.0f)
    Pour généré un nombre entre 0 et 10 (en float toujours):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float var = (rand()/(RAND_MAX+1.0f))*10;
    Voilà
    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.

  3. #3
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Le modulo n'est pas la bonne façon de générer une distribution de nombres float sur l'interval [a,b[.

    Une formule correcte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float r = (static_cast<float>(rand())/RAND_MAX)*(b-a) + a;

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Joel F Voir le message
    Le modulo n'est pas la bonne façon de générer une distribution de nombres float sur l'interval [a,b[.

    Une formule correcte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float r = (static_cast<float>(rand())/RAND_MAX)*(b-a) + a;
    Au minimum:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    float r = (rand()/(static_cast<float>(RAND_MAX)+1))*(b-a) + a;
    (sinon b est possible)

    Et je me demande pourquoi float plutôt que double...

  5. #5
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Et je me demande pourquoi float plutôt que double...
    j'ai copié d'un code qui trainait ou la formule était en float c'est tout

  6. #6
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Joel F Voir le message
    j'ai copié d'un code qui trainait ou la formule était en float c'est tout
    Je sais, c'était plus une remarque adressée à l'OP qu'à toi.
    En passant, si on ne veut pas générer b, utiliser des float risque de poser problème dès que RAND_MAX est supérieur à 2^23.

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 35
    Par défaut
    Merci pour votre intérêt envers moi ,mais aucune de ses solutions m'a aidé ,toujours les meme erreurs peut etre que je me suis trompé dans l'origine des erreurs
    Compiling test2.CPP:
    Error test2.CPP 48: Illegal use of floating point in function main()
    Error test2.CPP 52: Illegal use of floating point in function main()
    Error test2.CPP 57: Illegal use of floating point in function main()
    Error test2.CPP 57: Incompatible type conversion in function main()
    Error test2.CPP 57: Too few parameters in call in function main()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir string en float
    Par asma86 dans le forum C#
    Réponses: 7
    Dernier message: 12/09/2008, 15h08
  2. convertir String en float
    Par ulysse031 dans le forum Langage
    Réponses: 27
    Dernier message: 02/05/2007, 22h23
  3. Convertir AnsiString en Float
    Par El-Diablo- dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/02/2007, 08h43
  4. [C#] Convertir decimal en float avec SQLDataReader
    Par lancer83 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 26/07/2006, 09h29
  5. Convertir chaines en float
    Par Nasky dans le forum C
    Réponses: 17
    Dernier message: 30/04/2006, 21h03

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