J'ai une méthode qui traite de certaines coordonnées géographiques dans .NET, et j'ai une structure qui stocke une paire de coordonnées de sorte que si 256 est passé pour l'une des coordonnées, il devient 0. Cependant, dans un cas particulier, un valeur d'environ 255,99999998 est calculée, et donc stockée dans la structure. Quand il est imprimé dans ToString(), il devient 256, ce qui ne devrait pas arriver - 256 devrait être 0. Cela ne me dérangerait pas s'il imprimait 255.9999998 mais le fait qu'il imprime 256 quand le débogueur montre 255.99999998 est un problème. Avoir à la fois stocker et afficher 0 serait encore mieux.Comment contourner certaines erreurs d'arrondi?
Plus précisément, il y a un problème avec la comparaison. 255.99999998 est suffisamment proche de 256 tel qu'il devrait l'égaler. Que devrais-je faire en comparant les doubles? utiliser une sorte de valeur epsilon?
EDIT: Plus précisément, mon problème est que je prends une valeur, effectuer des calculs, puis effectuer les calculs opposés sur ce nombre, et je dois retourner la valeur d'origine exactement.
L'utilisation d'epsilon est la seule méthode légale pour comparer des valeurs à virgule flottante. abs (a - b) <= epsilon – Andrey
Il est parfaitement légal de comparer deux flottants avec ==, d'où le peu de compilateur qui s'en plaint. Cependant, la plus petite erreur d'arrondi peut faire que les deux valeurs ne soient pas égales quand les maths disent qu'elles devraient l'être, c'est pourquoi il n'est pas recommandé si vous appréciez votre santé mentale. – cHao
Si vous avez juste besoin de récupérer exactement la valeur d'origine, ne pouvez-vous pas simplement la stocker, ou des informations sur le processus de calcul original avec le numéro? –