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

Visual C++ Discussion :

evc4:division des doubles


Sujet :

Visual C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Par défaut evc4:division des doubles
    un petit problème pour les calculs des doubles.
    j'utilise evc4, voici mon code:
    double lat1=45.8541;
    double lat2=45.854;
    double deltaLat=lat1-lat2; //cette ligne donne bien 0.0001
    deltaLat=deltaLat/2; //et là 5.00000000016
    vous savez qu'est-ce qu'il s'est passé ??

  2. #2
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    Je ne voit pas de pb chez moi...

    j'obtiens 5.0000000001659828e-005

    Tu n'aurrais pas oublié de regarder le e-005 ?

  3. #3
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Par défaut
    oui, effectivement
    mais problème n'est pas résolu, en fait, j'ai fait une fonction qui calcul la distance entre 2 points latitude/longitude, mais le résultat est totalement faux.

    #include <math.h>
    double Distance(double Lat1,double Lng1,double Lat2,double Lng2)
    {
    double rayonTerre=6371;
    double deltaLat=Lat1-Lat2;
    double deltaLng=Lng1-Lng2; //jusqu'à ici c'est juste

    double a=sin(deltaLat/2)*sin(deltaLat/2)+
    cos(Lat1)*cos(Lat2)*sin(deltaLng/2)*sin(deltaLng/2);
    double c=2*atan2(sqrt(a),sqrt(1-a));
    double distance=rayonTerre*c;
    return distance; //le résultat est complètement faux, du gerne 0.7 au lieu de 0.02
    }

  4. #4
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    Quelles sont tes données d'entrées ?

  5. #5
    Membre averti
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Par défaut
    Les données entrées:
    Lat1=45.854 Lng1=4.7319
    Lat2=45.8541 Lng2=4.7321

    J'attend comme résultat 0.01907 (en théorie) mais j'ai 0.740652288866354

    L'incertitude (740 mètres par rapport à 20 mètres) est quand même inacceptable...

  6. #6
    Membre expérimenté
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par défaut
    Je pense que tu devrais convertir tes angles en radians...


  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Par défaut
    Bonjour,

    Je ne prendrai pas la peine de lire ton code.

    Une telle erreur vient forcément de l'algorithme, car si c'était le compilateur ou/et le processeur, ça se saurait depuis longtemps, n'est-ce pas ?

    Donc revois ton calcul, en faisant quand même attention aux approximations inévitables quand on calcule avec des réels (par exemple, faire la différence entre deux valeurs très proches peut donner un résultat loin de la valeur attendue, idem diviser par une valeur très faible...).

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

Discussions similaires

  1. Division des valeurs doubles
    Par loudji dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 16/02/2013, 04h27
  2. IBExpert : troncature des double precision ?
    Par Magnus dans le forum Outils
    Réponses: 1
    Dernier message: 25/08/2005, 15h07
  3. [TList]: trier des doubles
    Par PpPool dans le forum Langage
    Réponses: 6
    Dernier message: 11/08/2005, 11h34
  4. [C/C++] afficher des doubles dans une message box
    Par lalaurie40 dans le forum MFC
    Réponses: 1
    Dernier message: 24/05/2005, 14h55
  5. division de "double" par "0"
    Par ickis dans le forum C
    Réponses: 14
    Dernier message: 31/08/2003, 19h09

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