J'ai une application écrite en Microsoft Visual C++ 6.0. Maintenant, j'ai réécrit l'application dans Visual Studio 2010 en utilisant C#, mais les résultats ne correspondent pas en raison de problèmes de précision. L'un de ces problèmes de précision est le suivant.Problèmes de précision avec Visual Studio 2010
float a = 1.0f;
float b = 3.0f;
float c = a/b;
Ceci est le code C# lorsqu'il est exécuté dans Visual Studio 2010 donne c
valeur = 0.333333343
Mais le même code, la suppression f après la valeur dans la définition de la valeur, lorsqu'il est exécuté sur Visual C++ 6.0 donne la valeur c = 0.333333
.
Quelqu'un peut-il le trier et expliquer la façon d'avoir la même valeur pour c dans Visual Studio ainsi que dans Visual C++ 6.0 ??
En fait, les valeurs sont extraites de la fenêtre de surveillance. Je suis venu à savoir que les différentes versions de Visual Studio peuvent différer dans la représentation en format virgule flottante. Par conséquent, les valeurs en veille peuvent ne pas être utiles. C'est la raison pour laquelle j'ai imprimé les valeurs dans les deux versions de Visual Studio et les résultats sont les suivants. avec Visual Studio 6.0 en utilisant visual C++ langue, il est 0,333333 (six 3 années)
mais avec Visual Studio 10 en utilisant le langage C# est 0,3333333 (sept 3 années)
Alors quelqu'un peut-il me aider à faire mon programme C# produire le même résultat que visuel C++ ??? (comment puis-je faire des opérations flottantes pour produire les mêmes résultats sur les deux versions ???)
Comment regardez-vous les valeurs? la représentation interne est la même (à moins que je ne me trompe et que C# utilise le «double» dans les coulisses), mais les méthodes de montrer un nombre à l'utilisateur diffèrent, ainsi vous pourriez simplement regarder différents affichages par défaut. –
@MrLister la spécification C# 4.0 indique dans la section 4.1.6 qu'une opération binaire sur les flottants "est effectuée en utilisant * au moins *' float' plage et de précision "(soulignement ajouté). La précision dans les coulisses est donc définie par l'implémentation. Le .NET Framework peut très bien utiliser les doubles dans les coulisses. – phoog