2011-09-21 4 views
2

Au travail, nous avons MSVS2010 Ultimate, et j'écris un programme qui exécute des simulations exhaustives en utilisant des nombres réels. Je reçois des erreurs d'arrondi non triviales et j'ai déjà pris des mesures raisonnables pour m'assurer que mon algorithme est aussi numériquement stable que possible. Je voudrais passer à des nombres à virgule flottante quadruple précision de 128 bits (long double, droite?), Pour voir à quel point cela fait une différence.Compilation de l'application Windows C++ avec longs doubles dans VS2010

J'ai remplacé toutes les instances pertinentes de double avec long double, recompilé, et a couru à nouveau ma simulation factice mais ont exactement le même résultat que précédemment.

Ce sont mes (debug) options de compilateur par ma page de propriétés du projet en C/C++:

/ZI/nologo/W3/WX/BVB/Oy-/D "_MBCS"/Gm/EHsc/RTC1/GS/fp: précis/Zc: wchar_t/Zc: forScope /Fp"Debug\FFTU.pch "/ Fa" Déboguer "/ Fo" Déboguer \ "/Fd"Debug\vc100.pdb"/Gd/analyser -/errorReport: queue

Mon CPU de développement est un Core2 Duo T7300 mais la machine cible sera une i7. Les deux installations sont Windows 7 64 bits.

+4

Avec Visual C++, 'long double' est identique à' double', d'où le résultat est le même http: // msdn .microsoft.com/fr-us/library/s3f49ktz (v = VS.100) .aspx –

+0

Je vois. Existe-t-il un autre moyen d'obtenir une précision quadruple 128 bits dans VS2010 sous Windows? (sans utiliser de bibliothèques tierces comme GMP, mais Windows.h est correct). – Ozzah

+3

Pensez-vous que votre CPU fournit 128 bits en virgule flottante? x87 ne supporte que 32, 64 et 80 bits (je ne suis pas un expert en la matière, mais je ne pense pas que SSE fournisse des capacités de virgule flottante en uberwise non plus). –

Répondre

2

Vous pouvez basculer vers un compilateur non-Microsoft tel que gcc, Borland ou Intel. Tous reconnaissent long double comme précision étendue 80 bits, le format interne natif du 8087.

+1

Sur gcc-4.3.4 'sizeof (long double)' est 12. [ideone.com] (http://ideone.com/TLbiS). VC++ 'double' utilise des registres de 80 bits pour contenir les résultats intermédiaires des calculs à virgule flottante, mais ils sont stockés avec 64 bits en mémoire. – JohnPS

Questions connexes