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 :

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 195
    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 195
    Points : 17 163
    Points
    17 163
    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)

  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 195
    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 195
    Points : 17 163
    Points
    17 163
    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.

+ 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