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 :

Division entre 2 double


Sujet :

C++

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 38
    Points : 17
    Points
    17
    Par défaut Division entre 2 double
    Salut à tous,

    Voici un simple code décrivant mon problème
    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
     
    #include<iostream>
    using namespace std;
    #include<math.h>
    int main()
    {
    double d(5.8121), As(0.770701),t;
    t=As/d;
    if(t*d-As==0)
    cout<<"Oui"<<endl;
    else
    cout<<"Non"<<endl;//car t*d-As=-1.11022e-016
     cin.get();
       cin.ignore();
    return 0;
    }
    Donc voilà j'ai besoin que le programme m'affiche 'Oui', cepetit problème de précision me donne des résultats catatrophique quant au programme en entier

    PS: j'ai essayé 't=As./d' mais ça marche pas en C++, de meme j'ai augmenté la précision en définissant les variables comme étant des long double mais toujours le meme problème

    Et merci d'avance pour vos réponse

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    C'est inhérent à la représentation en floatant, c'est une contrainte du calcul numérique. Tu n'y peux rien, on ne compare jamais à 0 mais toujours à eps (eps à définir selon tes calculs).

    Si ton algorithme plus complexe donne des résultats catastrophique c'est soi que l'algorithme (enfin l'implémentation) n'est pas stable en soi. Ou alors que ton problème est mal conditionné.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 38
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Flob90 Voir le message

    Si ton algorithme plus complexe donne des résultats catastrophique c'est soi que l'algorithme (enfin l'implémentation) n'est pas stable en soi. Ou alors que ton problème est mal conditionné.
    Le problème de l'implementation réside dans ce test: je test c'est le résultat égale à zéro (normalement ça doit etre théoriquement) et là il passe à l'exécution du else donc il donne des résultat catastrophique

    Il faut que je compare à eps comme tu l'as dis mais eps ==? dans ce cas?,

    J'ai fait avant un truc de

    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
     
     
    #include<iostream>
    using namespace std;
    #include<math.h>
    int main()
    {
    double d(5.8121), As(0.770701),t;
    t=As/d;
    if(t*d-As<0.0000001)
    cout<<"Oui"<<endl;
    else
    cout<<"Non"<<endl;//car t*d-As=-1.11022e-016
     cin.get();
       cin.ignore();
    return 0;
    }
    et là ça me donne Oui mais je trouve que c'est pas itéressant de contrler tous les test de ce type

  4. #4
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    C'est pourtant comme ça qu'on compare des valeur en calcul numérique. Tu n'as pas vraiment le choix.

    Pour le eps, c'est pas simple à définir (et je n'ai pas les connaissance pour le faire), mais je partirais sur une définition relative à l'ordre de grandeur attendu. Et après plutôt que de chercher la limite théorique acceptable, je chercherais plutôt à savoir quel précision j'ai besoin.

    Typiquement si ton problème modélise un système physique, une précision relative de 10^-6 est suffisante dans bien des cas (on mesure pas si souvent que ça avec une meilleur précision, domaine métrologique exclu).

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 38
    Points : 17
    Points
    17
    Par défaut
    Oui donc apparament j'ai pas le choix merci beaucoup Flob90

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

Discussions similaires

  1. problème BETWEEN entre 2 doubles négatifs
    Par Treuze dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/11/2007, 10h52
  2. faire une division entre deux sommes
    Par dylane.sof dans le forum SQL
    Réponses: 8
    Dernier message: 13/08/2007, 16h45
  3. Division d'un double - probléme récurrent
    Par bonjour69 dans le forum C
    Réponses: 8
    Dernier message: 19/05/2007, 20h06
  4. Touche entrée sur double formulaire -> validation
    Par 10-nice dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/10/2005, 12h02
  5. Faire une division entre deux chiffres?
    Par shun dans le forum Langage SQL
    Réponses: 9
    Dernier message: 09/09/2005, 16h37

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