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 :

Multiplier des Double


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 53
    Par défaut Multiplier des Double
    Plop,

    Autre probleme etrange :

    J'ai une fonction myvec_norme() qui me renvoie la norme d'un vecteur, enregistree dans un double.
    Le soucis, c'est que si je fais :
    myvec_norme(1,1,1) * myvec_norme(1,1,1)
    (la norme d'un vecteur (1,1,1) est de racine de trois)
    J'obtient 2,9999999996.
    Et pourtant, myvec_norme(1,1,1)==sqrt(3) m'affiche vrai (via gdb).

    Une idee ?

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Et pourtant, myvec_norme(1,1,1)==sqrt(3) m'affiche vrai (via gdb).
    Oui, mais il n'y a aucune chance que sqrt(3) donne la racine carrée de 3 de façon exacte. sqrt(3) ne peut en donner qu'une valeur approchée (certes de très près).
    J'obtient 2,9999999996.
    C'est vrai que pour un calcul en double, on est assez loin de la bonne valeur (il manque des 9).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 9
    Par défaut
    Ta fonction myvec_norme() doit utiliser un calcul du genre sqrt(a^2+b^2+c^2), ici sqrt(1+1+1). Il est donc normal d'avoir au final myvec_norme(1,1,1)==sqrt(3) car ça reviens à faire sqrt(1+1+1)==sqrt(3), ce qui est naturellement vrai. Si tu fais sqrt(3)*sqrt(3), tu as de bonne chances d'obtenir également 2,9999999996, si tu utilise la même précision.

Discussions similaires

  1. [XML]Protection des doubles quotes
    Par DarkNagash dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 27/04/2006, 10h59
  2. cpu trop élevé avec des doubles vecteurs
    Par kuzloka dans le forum C++
    Réponses: 8
    Dernier message: 26/12/2005, 19h29
  3. IBExpert : troncature des double precision ?
    Par Magnus dans le forum Outils
    Réponses: 1
    Dernier message: 25/08/2005, 15h07
  4. [TList]: trier des doubles
    Par PpPool dans le forum Langage
    Réponses: 6
    Dernier message: 11/08/2005, 11h34
  5. [C/C++] afficher des doubles dans une message box
    Par lalaurie40 dans le forum MFC
    Réponses: 1
    Dernier message: 24/05/2005, 14h55

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