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 :

Calcul exponentielle de nombre aléatoire!


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Calcul exponentielle de nombre aléatoire!
    Bonjour! Je suis entrain d'écrire un petit programme qui d'une première part, génère 20 nombres aléatoires et qui ensuite fait le calcul exponentielle de chacun de ces nombres.
    J'utilise la librairie cmath et exp() mais je n'arrive pas à faire fonctionner le tout. La ligne problématique semble être : cout << exp(valeurs[i]) << Avez-vous idée pourquoi ça ne fonctionne pas? Merci beaucoup!

    Voici mon code :

    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
    #include <iostream>
    #include <conio.h>
    #include <string>
    #include <iomanip>
    #include <cmath>
    using namespace std;
    void tri_iteratif(int tableau[ ], int grosseur)
    {
    int temp, i, j;
    for (i = 0; i < grosseur; i++)
    for (j = 0; j < grosseur; j++)
    if (tableau[i] < tableau[j])
    {
    temp = tableau[i];
    tableau[i] = tableau[j];
    tableau[j] = temp;
    	 	 	}
    }
    main()
    { 	
    int valeurs[20], i;
    for (i = 0; i < 20; i++)
    valeurs[i] = rand() % 1000;
    tri_iteratif(valeurs, 20);
    for (i = 0; i < 20; i++)
    cout << exp(valeurs[i]) << " ";
     
    getch();
    return 0;
    }

    Voici le résultat de l'exécution du programme:

    6.39843e+017
    9.39074e+062
    2.48752e+073
    1.0883e+122
    1.13333e+145
    3.0021e+155
    2.2511e+189
    3.25566e+201
    6.53918e+202
    3.91528e+207
    1.73217e+213
    1.40359e+217
    1.50525e+306
    1.#INF
    1.#INF
    1.#INF
    1.#INF
    1.#INF
    1.#INF
    1.#INF

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 435
    Points
    2 435
    Par défaut
    Bonsoir.

    Ton programme fonctionne parfaitement, tu as seulement atteins les valeurs maximales représentables par un double (celui retourné par la fonction exp) qui est à peu près 1.7*10308 (voir std::numeric_limits<double>::max).

    Pour résoudre ton problème tu peux soit passer par le type long double, et donc utiliser la fonction expl au lieu de exp, soit utiliser des nombres inférieurs à ~709.72 (soit ln(1.7*10308)).

    Une petite remarques, tu peux utiliser std::sort pour trier un tableau, qui est plus simple à utiliser et assurément plus rapide. tri_rapide(valeurs, 20) deviendrait alors sort(valeurs, valeurs+20).
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Collégien
    Inscrit en
    Octobre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Collégien
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2014
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Merci pour cette réponse! J'ai modifié valeurs[i] = rand() % 1000; par valeurs[i] = rand() % 200; pour avoir de plus petites valeurs comme tu dis mais maintenant mes valeurs ne sont plus en ordre quand j'exécute le programme.

    J'obtiens :

    Voici les 20 valeurs aléatoires:

    5.32048e+011
    5.32048e+011
    4.31123e+015
    6.39843e+017
    6.23515e+027
    1.25236e+029
    7.49842e+033
    1.5061e+035
    3.3174e+039
    2.68812e+043
    3.98952e+045
    7.12059e+053
    1.56841e+058
    4.67537e+061
    9.39074e+062
    4.15459e+068
    8.34472e+069
    2.26833e+070
    2.48752e+073
    4.86882e+084


    Que faire?

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 435
    Points
    2 435
    Par défaut
    En fait ils sont dans l'ordre.
    Ces nombres sont écrits en notation scientifique et pas en notation conventionnelle.
    Dans cette notation, l'ordre de grandeur du nombre est à droite, après le "e+".
    Dans ton premier nombre, 5.32048e+011, le 11 indique qu'il est composé de 12 chiffres (11 + 1). Le dernier 4.86882e+084 en a 85 (84 + 1), il est donc bien plus grand !
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  5. #5
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 435
    Points
    2 435
    Par défaut
    Bonsoir.

    Si tu as eu la réponse à ta question, n'oublie pas de mettre ton post en
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

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

Discussions similaires

  1. [EG] Colonne calculée, nombre aléatoire
    Par Pierre-Henri ROBLOT dans le forum Outils BI
    Réponses: 6
    Dernier message: 30/07/2014, 13h30
  2. Réponses: 8
    Dernier message: 20/02/2012, 09h45
  3. recherche algo de génération de nombre aléatoire
    Par Pascale38 dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 14h20
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  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