Les mathématiques.Cos & Mathématiques.Le péché en C#

Je suis en train d'essayer quelque chose que je pensais que devrait être assez simple. J'ai un angle, d'une position et d'une distance et je veux trouver X,Y coordonnées à partir de cette information.

Avec un exemple d'entrée de 90 degrés-je convertir la valeur en radians avec le code suivant:

public double DegreeToRadian(float angle)
{
  return Math.PI * angle / 180.0;
}

Cela me donne 1.5707963267949 radians
Puis, quand j'utilise

Math.Cos(radians)

Je me retrouve avec une réponse de: 6.12303176911189 E-17

Ce que le diable se passe? Le cosinus de 90 degrés doit être de 0, alors pourquoi suis-je en obtenir une telle déviance... et surtout comment puis-je l'arrêter?

Sans aucun doute, des tours à 0. L'utilisation d'un spécificateur de format lors de la conversion de la valeur en chaîne de sorte que l'utilisateur voit la façon dont ils attendent.
Ok, je prends le point que le manque de précision est due au manque de précision en virgule flottante, les types, mais comment fait quelque chose comme Calculatrice de Windows à gérer pour obtenir la réponse morts, est-il juste de tricher et d'utiliser une table de recherche?
qui a dit que la Calculatrice de Windows .Net doubles (n'est pas), ou de tout type à virgule flottante (n'est pas). Et qui dit que c'est de la transmission de la précision des résultats d'un calcul plutôt que d'appliquer sane règles d'arrondi?
La calculatrice a été totalement réécrit il y a quelques années pour l'utilisation en précision arbitraire de l'arithmétique en réponse à précisément de tels bugs.
Votre valeur de pi est désactivée par quelques parties 10 à 17, donc il ne devrait pas être une surprise que le résultat est aussi par quelques parties de 10 à 17. Pi est arrondi à 16 chiffres.

OriginalL'auteur elaverick | 2011-05-21