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 :

BCB XE2 Problème de overflow sur long double


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 24
    Points : 19
    Points
    19
    Par défaut BCB XE2 Problème de overflow sur long double
    Bonjour,
    J'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	  try {
    		long double d=1000000.0;
    		int n=0;
    		while (++n<100000)
    			d+=d;
    	  }
    	  catch(...) {}
    Il fonctionne parfaitement avec la version BCB2010 (une exception pour débordement et levée puis interceptée).
    Avec XE2, il fonctionne 5/6 fois puis une exception EInvalidOp est levée !
    Pour tester, j'ai mis une fiche vierge avec un bouton qui exécute ce code lorsque je clique dessus.
    Alors là, je ne vois variment pas ce que je peux faire et où est le problème !!!
    Merci à vos lumières...

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Salut!

    J'ai cherché un peu plus d'information sur le type d'exception EInvalidOP et je suis tombé la dessus.

    A priori l'exception que tu rencontre est d'un type différent de ce que tu avais sous BCB2010.
    Avant tu avait une exception "débordement", mais la apparemment c'est une instruction inconnue au bataillon qui pause problème.

    Bon ça ne solutionne pas ton soucis, mais ça donne une piste.

    Mon idée est qu'a force de "catcher" ce type d'exception le programme se corromp. Ce qui déclenche une instruction inconnue par le processeur.

    J'ai testé sous XE et le même problème se pose.

    Ce qui serait intéressant c'est de savoir pourquoi ce type d'exception n'est pas "catchable".

    Dans quel type de projet tu aurais besoin de gérer ce type d'exception ?

    EDIT : Si tu fait du pas à pas dans la vue CPU de ton XE2 tu veras que l'exception EInvalidOP se déclenche dans la section KERNELBASE.RaiseException. Le traitement de l'exception "débordement" déclencherait-il une exception ? Possible, à creuser

    EDIT 2 : (Et oui encore un edit!!)
    Juste une remarque en plus, j'ai noté chez moi que l'erreur ne se déclenche que si je lance le traitement en boucle.
    En revanche si le lance plusieurs fois le programme sans boucler sur le traitement (j'ai testé à peu près 50 lancements), pas d'erreur.
    Donc c'est l'accumulation du traitement des exceptions qui pose problème

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 24
    Points : 19
    Points
    19
    Par défaut merci pour ta réponse
    ça me confirme qu'il y a bien un problème et que ce n'est pas moi le problème !
    Et c'est un gros problème pour moi parce que c'est sur un gros projet d'interpréteur, où il y a beaucoup de calculs (statistiques en particulier).
    Je migre le projet de BCB 2010 vers BCB XE2 et je suis tombé la-dessus par hasard...en cliquant bêtement frénétiquement sur un bouton de test
    Chez moi, ça plante en boucle et quand j’exécute 5 fois de suite le bout de code : 4 fois ça marche et la 5ème il y a cette exception non interceptée....
    et ainsi de suite, c'est bizarre.
    Je suppose qu'il faut que je signale à Embarcadero le problème....je ne vois pas d'autre solution. Ou que je passe à XE3, en espérant que ce bug ait été corrigé....
    Si tu as du nouveau...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 16
    Points
    16
    Par défaut
    Bonjour !

    Tu peux effectivement essayer de contacter Embarcadero pour signaler le problème. Ils ont peut être déjà solutionné le problème.

    Je pense que tu peux également soumettre ton problème dans la section IDE -> DELPHI du site.
    Tu auras plus de chance de tomber sur quelqu'un qui connaisse ce type d'exception et la façon de la gérer.

    Je reviens vers toi si jamais une idée lumineuse me traverse l'esprit (ça ne m'arrive pas souvent, j'espère que ça ne fera pas mal ).

    Je te souhaite bon courage et je te tiens au courant si j'ai du nouveau.

Discussions similaires

  1. BCB XE2 problème de débordement sur long double
    Par Metrica dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/11/2012, 19h12
  2. problème d'arrondi sur un Double
    Par Gordon Freeman dans le forum Général Java
    Réponses: 2
    Dernier message: 23/06/2010, 10h35
  3. Problème avec opération sur les double
    Par luimême dans le forum C#
    Réponses: 2
    Dernier message: 17/04/2008, 10h19
  4. Problème de justification sur longs documents
    Par flob31 dans le forum Mise en forme
    Réponses: 9
    Dernier message: 11/06/2007, 22h35
  5. Réponses: 5
    Dernier message: 11/05/2006, 08h51

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