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 :

différence entre un double en 32 bits et en 64 bits


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Par défaut différence entre un double en 32 bits et en 64 bits
    Bonjour,
    J'ai un projet c++. J'ai utilisé Visual Studio. dans mon projet j'ai utilisé des double. J'ai commencé avec un projet win32. J'ai trouvé un résultat. en utilisant le même calcul avec les mêmes nombres en 64 BITS; JE TROUVE UN AUTRE RéSULTAT;
    j'ai fixé le nombre de chiffre après la virgule par 4, alors j'ai obtenu le même résultat.
    J'ai pas compris pourquoi cette différence entre le résultat. Un double en 64 bits est codée sur plus de bits que 32 ou bien quoi exactement?
    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    Le format d'un double est normalisé par l'IEEE.
    Mais les calculs peuvent changer en fonction des possibilités du processeur, du compilateur, de la vitesse du vent et de la couleur de la robe de la fille du capitaine.
    Qui dit "double", dit nombre à virgule flottante, dit calcul approximatif.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Le format d'un double est normalisé par l'IEEE.
    Mais les calculs peuvent changer en fonction des possibilités du processeur, du compilateur, de la vitesse du vent et de la couleur de la robe de la fille du capitaine.
    Qui dit "double", dit nombre à virgule flottante, dit calcul approximatif.
    Comment je peux avoir le même résultat en win32 et en win64 sans exiger le nombre de chiffre après la virgule

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    >sans exiger le nombre de chiffre après la virgule
    Vous ne pouvez pas "exiger" ce genre de chose sur de la virgule flottante.
    On fait toujours des calculs d'arrondies et des approximations avec des nombres en virgule flottante.

    C'est quoi votre vrai problème ?

    Parce que 32 ou 64 bits c'est toujours de l'à peu près.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    354
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2008
    Messages : 354
    Par défaut
    Citation Envoyé par bacelar Voir le message
    >sans exiger le nombre de chiffre après la virgule
    Vous ne pouvez pas "exiger" ce genre de chose sur de la virgule flottante.
    On fait toujours des calculs d'arrondies et des approximations avec des nombres en virgule flottante.

    C'est quoi votre vrai problème ?

    Parce que 32 ou 64 bits c'est toujours de l'à peu près.
    Merci Mr Bacelar pour votre réponse.
    Mon problème exactement, comment je peux avoir le même résultat de mon projet en win32 ou bien en win64. EN fait j'ai du calcul sur des doubles et je veux avoir le même résultat en 64 bit ou bien en 32 bit

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 502
    Par défaut
    EN fait j'ai du calcul sur des doubles et je veux avoir le même résultat en 64 bit ou bien en 32 bit
    Besoin complètement abscons.
    En gros, faut chercher tout ce qui peut "améliorer" le calcul grâce au support de 64bits ?
    Franchement, vous allez vous faire chier pour démonter toutes les options de compilation, d'optimisation, d'édition de lien, juste pour ça ????

    Commencer par bien maitriser les nombres à virgule flottante en 32 bits et en 64bits, avant de vous prendre la tête avec ces détails.

  7. #7
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par bacelar Voir le message
    Le format d'un double est normalisé par l'IEEE.
    Mais les calculs peuvent changer en fonction des possibilités du processeur, du compilateur, de la vitesse du vent et de la couleur de la robe de la fille du capitaine.
    Qui dit "double", dit nombre à virgule flottante, dit calcul approximatif.
    Il y a de légères imprécisions dans ce post, même si de manière informelle, il est assez juste :

    - Les doubles C++ ne sont pas forcément au format IEE754 (même si c'est désormais le cas quasiment partout), il y a moyen de le vérifier avec std::numeric_limits
    - Les calculs ne sont pas supposés changer en fonction du compilateur (mais certains compilos ont une option "optimise comme tu veux, quitte à modifier mes résultats")
    - Ils ne varient pas en fonction du vent ou d'une couleur de petite culotte, ils ont un comportement totalement prédictible et reproductible, mais très difficile à maîtriser... En particulier, ils ne marchent pas comme les réels en mathématique. Par exemple, l'addition n'est pas associative (a+b)+c peut être totalement différent de a+(b+c), par exemple...

    Tout ça pour dire que si on fait les mêmes opérations dans le même ordre avec des doubles en 32 ou en 64 bits, on doit avoir le même résultat (sauf option du compilo "calculs imprécis"). Si ce n'est pas le cas, ce n'est pas à cause des doubles, c'est juste qu'il y a un bug dans le code.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'ai déjà eu un problème de calcul en virgule flottante qui changeait entre Visual 2005 et 2010; j'ai dû porter ce bout de code en C# pour avoir les mêmes valeurs (j'étais en C++/CLI).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Un rapport avec ça?
    http://stackoverflow.com/questions/1...porting-issues

    "There is no inherent need for floats and doubles to behave differently between 32-bit and 64-bit code but frequently they do. "

    "On intel x86 platforms 32-bit code often uses the x87 co-processor instruction set and floating-point register stack for maximum compatibility whereas on amb64/x86_64 platforms, the SSE* instructions and xmm* registers and are often used instead. These have different precision characteristics."

    ?

  10. #10
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Possible solution dans l'autre thread:
    Citation Envoyé par Médinoc Voir le message
    Par défaut, Visual Studio est en mode Précis et non en mode Strict.
    Tu peux essayer de compiler ton projet en mode Strict, et là ça ne devrait pas varier.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. différences entre const double& et double
    Par BigNic dans le forum Langage
    Réponses: 8
    Dernier message: 30/09/2011, 17h20
  2. différence entre long et double
    Par bolltt dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/03/2008, 18h46
  3. différence entre double et float
    Par Maria1505 dans le forum C++
    Réponses: 2
    Dernier message: 03/01/2007, 05h16
  4. Différence entre Integer et double?
    Par Michel DELAVAL dans le forum Access
    Réponses: 15
    Dernier message: 10/02/2006, 15h57
  5. Différences entre Assembleur 16 et 32 bits
    Par Rulian dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2004, 13h05

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