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 et convertion de type, resultat incoherent


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut Calcul et convertion de type, resultat incoherent
    Bonjour,

    J'effectue sur un int que je cast implicitement en double une opération mathématique, lorsque je print le résultat, tout se passe bien entre 1 et 9, mais si je lui envoie une valeur n >= 10 j'obtiens des résultats étranges comme par exemple "3.6288e+06" sur 10 au lieu de "3 628 800", je ne comprends pas pourquoi... Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int             f(int n)
    {
      double        r = n;
     
      for (int i = 1; i < n ; i++)
        r = r * (n - i);
      std::cout << "operation sur: " << n << " = " << r << std::endl;
      r = round(r);
      return (static_cast<int>(r));
    Merci pour vos indications !

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    std::fixed et consort ou Boost.Format
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int             f(int n)
    {
      double        r = n;
     
      for (int i = 1; i < n ; i++)
        r = r * (n - i);
      std::cout << "operation sur: " << n << " = " << std::fixed<< r << std::endl;
      r = round(r);
      return (static_cast<int>(r));
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 77
    Par défaut
    Ok il s'agissait de la notation scientifique apparemment, c'est vrai que ca semble évident maintenant... Merci pour ta réponse !

  4. #4
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 80
    Par défaut
    euh, si je ne me trompe pas, ton truc calcule factorielle (n) non?

    Dans ce cas pourquoi passer par des casts et des doubles qui disparaissent ensuite pour des int...

    Si tu mets des doubles, j'imagine que c'est pour pouvoir dépasser 2^32 non?
    Dans ce cas pourquoi recaster à la fin?

    Fais plutôt quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    double fact (int n)
    {
        double res = 1. ;
        for (double i = 1 ; i < n+0.5 ; ++i)
        {
            res *= i ;
        }
        return res ;
    }

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

Discussions similaires

  1. convertion de types
    Par ToTo13 dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2006, 10h21
  2. Erreur de convertion de type de données
    Par ben_skywalker dans le forum Access
    Réponses: 14
    Dernier message: 06/06/2006, 11h39
  3. [C#] Convertion de type (string/int)
    Par M1000 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/05/2006, 16h03
  4. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

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