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 :

Resultat different suivant les options gcc


Sujet :

C

  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Resultat different suivant les options gcc
    Bonjour,

    Je compile sous windows avec gcc4.4.1 une application de calcul en C. Elle est trop complexe pour que je puisse l'exposer ici. Mais je séche sur un probléme depuis plusieurs jours. Suivant les options de compilation de gcc (debug, release, -O1, -O3.. SSE) j'ai un résultat numerique différent. Comment est-ce possible d'aprés vous.
    J'ai bien songé à une variable ou un tableau non initialisé et j'ai blindé cette partie là, mais rien n'y fait.
    Le code fonctionne bien mais petit à petit au cours du calcul certaines grandeurs numeriques flaotantes divergent légérement d'une version à l'autre. Ce n'est que de quelques % mais c'est vraiment trés trés ennuyeux, je dirai même rédibitaoire pour ce type d'application.

    Merci de votre aide

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Il y a déjà eu un fil ici traitant du même genre de problème, mais je ne parviens pas à le retrouver.

    Peux-tu au moins poster la partie de code qui affiche (voire déclare et gère) une des variables concernées ?

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 129
    Billets dans le blog
    149
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Bonjour,

    Je compile sous windows avec gcc4.4.1 une application de calcul en C. Elle est trop complexe pour que je puisse l'exposer ici. Mais je séche sur un probléme depuis plusieurs jours. Suivant les options de compilation de gcc (debug, release, -O1, -O3.. SSE) j'ai un résultat numerique différent. Comment est-ce possible d'aprés vous.
    J'ai bien songé à une variable ou un tableau non initialisé et j'ai blindé cette partie là, mais rien n'y fait.
    Le code fonctionne bien mais petit à petit au cours du calcul certaines grandeurs numeriques flaotantes divergent légérement d'une version à l'autre. Ce n'est que de quelques % mais c'est vraiment trés trés ennuyeux, je dirai même rédibitaoire pour ce type d'application.

    Merci de votre aide
    Pour verifié le blindage des erreurs de mémoire, utilisez valgrind

    Sinon, comme le problème ne vient pas de là de toute façon, c'est juste que l'imprecision du int vous gène. Je suggère l'utilisation d'un double... ou alors une option pour bloquer la precision d'un float.
    Cette option doit être surement activé selon les autres flags.
    Donc, voir le man de gcc
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Bonjour,

    C'est vraiment un probleme d'accumulation d'imprecision, ca ne concerne pas une variable en particulier qui sont toutes définies en double précision.
    Valgrind ne donne rien.

  5. #5
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Salut,
    Citation Envoyé par uriotcea Voir le message
    C'est vraiment un probleme d'accumulation d'imprecision, ca ne concerne pas une variable en particulier qui sont toutes définies en double précision.
    J'imagine que tu travailles sur des flottants? Si oui, il faut preferer les calculs en virgules fixes pour limiter l'accumulation d'erreur. Si ce sont des entiers, attention aux conversions implicites et aux divisions.

  6. #6
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Je suis d'accord avec toutes vos suggestions amméliorant la précisions des calculs, mais cela ne peut pas expliquer les différences d'une option de compilation à l'autre.
    Je dirais que si le calcul est mal ecrit il l'est aussi bien en debug qu'en release!

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Je suis d'accord avec toutes vos suggestions amméliorant la précisions des calculs, mais cela ne peut pas expliquer les différences d'une option de compilation à l'autre.
    Je dirais que si le calcul est mal ecrit il l'est aussi bien en debug qu'en release!
    C'est vrai que logiquement le résultat devrait être le même. C'est très bizarre, un tel comportement.

    Est-ce qu'il serait possible de nous filer un bout de code compilable (le même, dépoussiéré, ou un autre qui reproduit la même erreur), histoire qu'on puisse voir ça de plus près ?

    Sinon, une idée comme ça. Est-ce que tu ne modifierais pas une zone mémoire sans le savoir (style, un débordement de tableau), qui modifierait le contenu d'autres variables, provoquant un résultat différent en fonction des optimisations ?

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Hoe,

    Selon les options, les optimisations changent probablement l'ordre effectif des calculs, ce qui, avec des flottants, suffit pour changer le résultat.

  9. #9
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Je ne pense pas qu''il y ait de débordements de tableau ou autres problémes de ce type. Valgrind ne m'indique rien et le comportement est trés stable. *

    Apres quelques recherche je me demande si ce n'est pas liée à ce type de directive de compilation :
    _FPU_EXTENDED
    _FPU_DOUBLE

    Pour finir, je ne peux vraiment pas fournir le moindre bout de code compréhensible. ce sont des calculs de relaxation beaucoup trop lourds pour etre simplifié

Discussions similaires

  1. les options de gcc
    Par mima_mine dans le forum GCC
    Réponses: 3
    Dernier message: 21/01/2010, 15h34
  2. Réponses: 2
    Dernier message: 04/02/2005, 13h23
  3. difference entre les edi
    Par Trust_ dans le forum Débats sur le développement - Le Best Of
    Réponses: 44
    Dernier message: 02/06/2004, 19h18
  4. Vous gerez comment les options d'un programme?
    Par n0n0 dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2002, 13h21

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