none
Portage Visual C++ 6 vers Visual Studio.NET 2003 (ou 2010) : pourquoi les résultats des calculs changent ? RRS feed

  • Question

  • Bonjour,

    Quelqu'un aurait-il la réponse, à savoir pourquoi les résultats des calculs d'une application développée en C++ changent notablement entre VC++ 6.0 et Studio.NET 2003 ? par contre, les mêmes résultats sont obtenus entre .NET 2003 et .NET 2010...

    En regardant sur Internet ou dans MSDN, il y aurait eu un changement dans la représentation des nombres pour se conformer à la norme IEEE (IEEE 754 ?), mais je voudrais savoir s'il existe un mécanisme (Setting ou autre) de rétro-compatibilité dans Studio .NET 2003 (ou 2010), par exemple, pour retomber sur les résultats obtenus avec VC++ 6, le but étant d'éviter d'avoir à revalider tous les calculs et remettre à jour l'ensemble du plan de tests de l'application.

    Merci pour votre aide.

    mardi 27 septembre 2011 15:00

Réponses

  • Bonjour,

    Le problème avec VC6 est qu'il était très permissif. Aujourd'hui, si tu fais des calculs et que par exemple, ton soft tourne en 32bits ou 64bits, tu ne peux plus te permettre ce que faisait VC6.

    A partir de VC9 (VS2008) et maintenant sur VC10 (VS2010), le compiler est fully compliant par rapport à la norme C++. Herb Sutter (chairman du C++ iso) a beaucoup oeuvré dans ce sens.

    Par expérience, il faut que tu check les opérations de type cast douteux qui était du type downcast... bref le C++ contient de nombreuses manières différentes pour traiter ce type de problème, suivant que tu sois C++/STL developpeur ou plutôt full/Windows developpeur.

    Conclusion: VC6 ne peut pas et ne doit pas être considéré comme la référence.

     

     

    Cordialement,

    Christophe PICHAUD

    MCSD, MCSD.NET, MCTS NET 2.0

    www.christophep.com

     


    Christophe Pichaud
    mercredi 28 septembre 2011 15:02

Toutes les réponses

  • Bonjour,

    Le problème avec VC6 est qu'il était très permissif. Aujourd'hui, si tu fais des calculs et que par exemple, ton soft tourne en 32bits ou 64bits, tu ne peux plus te permettre ce que faisait VC6.

    A partir de VC9 (VS2008) et maintenant sur VC10 (VS2010), le compiler est fully compliant par rapport à la norme C++. Herb Sutter (chairman du C++ iso) a beaucoup oeuvré dans ce sens.

    Par expérience, il faut que tu check les opérations de type cast douteux qui était du type downcast... bref le C++ contient de nombreuses manières différentes pour traiter ce type de problème, suivant que tu sois C++/STL developpeur ou plutôt full/Windows developpeur.

    Conclusion: VC6 ne peut pas et ne doit pas être considéré comme la référence.

     

     

    Cordialement,

    Christophe PICHAUD

    MCSD, MCSD.NET, MCTS NET 2.0

    www.christophep.com

     


    Christophe Pichaud
    mercredi 28 septembre 2011 15:02
  • Bonjour,

    Le problème avec VC6 est qu'il était très permissif. Aujourd'hui, si tu fais des calculs et que par exemple, ton soft tourne en 32bits ou 64bits, tu ne peux plus te permettre ce que faisait VC6.

    A partir de VC9 (VS2008) et maintenant sur VC10 (VS2010), le compiler est fully compliant par rapport à la norme C++. Herb Sutter (chairman du C++ iso) a beaucoup oeuvré dans ce sens.

    Par expérience, il faut que tu check les opérations de type cast douteux qui était du type downcast... bref le C++ contient de nombreuses manières différentes pour traiter ce type de problème, suivant que tu sois C++/STL developpeur ou plutôt full/Windows developpeur.

    Conclusion: VC6 ne peut pas et ne doit pas être considéré comme la référence.

     

     

    Cordialement,

    Christophe PICHAUD

    MCSD, MCSD.NET, MCTS NET 2.0

    www.christophep.com

     


    Christophe Pichaud

    Bonjour,

    Merci pour votre réponse, elle m'apporte quelques éléments complémentaires par rapport à ce que je savais déjà.

    En regardant d'un peu plus près dans notre application (ça prend du temps), il semble que c'est l'utilisation de la fonction random_shuffle qui pose problème...

    Cordialement.

    lundi 3 octobre 2011 08:24
  • N'oubliez pas aussi qu'un même programme peut donner des résultats différents sur des générations de CPU différents (mais binairement compatible).

    Le renforcement de la norme C++ sur ces aspects est aussi là pour réduire la survenu de ces problèmes que sur du code "sale".


    Paul Bacelar, Ex - MVP VC++
    vendredi 7 octobre 2011 16:47
    Modérateur