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 :

Fraction en C++


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Points : 49
    Points
    49
    Par défaut Fraction en C++
    Bonsoir,

    Question sûrement très bête mais l'algo ci-dessous me renvoie sans arrêt 0 parce qu'il semblerait que 2/3 renvoie la valeur 0...


    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
    #include <iostream>
    using namespace std;
     
    int main()
    {
    	int N = 10;
    	double x;
    	int i;
     
    	cout << "Enter a starting point between -3 and 3" << endl;
    	cin >> x;
     
    	for (i = 1; i < N + 1; i++)
    	{
    		x = (2/3) *(1-x*x);
    	}
     
    	return x;
     
    }
    Quelqu'un peut-il m'expliquer ?
    Normalement l'itération Xn+1 = (2/3) * (1-Xn²) devrait rester à -2 en fixant à x à -2 au départ. Et là ça passe à 0 directement.

    D'avance merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Recherche du travail
    Inscrit en
    Août 2004
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Recherche du travail

    Informations forums :
    Inscription : Août 2004
    Messages : 561
    Points : 1 320
    Points
    1 320
    Par défaut
    Bonsoir,

    Pour corriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = (2.0/3.0) *(1.0-x*x);
    L'explication:
    Dans la partie de l'expression (2/3) le compilateur créer une valeur temporaire de type int. Donc 2/3 en type int égale 0.
    Il faut explicité le format en rajoutant .0 (format float). Fait bien attention au typage y compris dans tes rvalues !

    PS : Cette expression est aussi valide :
    Avoir un regard neutre sur notre vie dénuée de sens, c'est la voir tel un ignorant
    ------------------------------------------------------------------------------------------------------

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pour être précis, un . seul suffirait (2./3) et produit une constante de type double. Un float requiert un f (2.f)
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 48
    Points : 49
    Points
    49
    Par défaut
    Merci.

    Cela signifie donc qu'il faut que je mette systématiquement un "." lorsqu'il s'agit d'une fraction pour déclarer un float ?

  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Précisément.
    Ou éventuellement convertir un des opérandes avec static_cast<double>, quand aucun n'est une constante.

    De plus, comme les floats génèrent beaucoup plus d'imprécision que les doubles, il vaut mieux utiliser ces derniers pour les calculs.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. Un format fraction
    Par rumpeballe dans le forum Access
    Réponses: 4
    Dernier message: 15/10/2006, 11h54
  2. [Math] Comment empêcher que les fractions rapetissent ?
    Par sekiryou dans le forum Mathématiques - Sciences
    Réponses: 3
    Dernier message: 19/08/2006, 05h29
  3. Fraction
    Par Odion dans le forum Général Python
    Réponses: 4
    Dernier message: 15/04/2006, 00h38
  4. [Maths] Irrationnel vers approx. sous forme de fraction
    Par anykeyh dans le forum Mathématiques
    Réponses: 2
    Dernier message: 04/04/2006, 12h25
  5. [Debutant] Problème de fraction dans un programme
    Par SAKDOSS dans le forum Débuter
    Réponses: 4
    Dernier message: 22/10/2005, 18h38

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