Estoy terriblemente molesto por la inexactitud de las funciones trigonométricas intrínsecas en el CLR. Es bien sabido quePrecisión de Math.Sin() y Math.Cos() en C#
Math.Sin(Math.PI)=0.00000000000000012246063538223773
en lugar de 0. Algo similar ocurre con Math.Cos(Math.PI/2)
.
Pero cuando estoy haciendo una larga serie de cálculos que en casos especiales se evalúan como
Math.Sin(Math.PI/2+x)-Math.Cos(x)
y el resultado es cero para x = 0,2, pero no cero para x = 0,1 (probarlo). Otro problema es cuando el argumento es un número grande, la inexactitud es proporcionalmente grande.
Así que me pregunto si alguien ha codificado una mejor representación de las funciones trigonométricas en C# para compartirlas con el resto del mundo. ¿El CLR llama a alguna biblioteca matemática C estándar que implemente CORDIC o algo similar? link: wikipedia CORDIC
¿Qué tan exacta cree que es la representación de pi como un doble? –
Si quiere matemática simbólica, haga matemática simbólica. Si usa tipos de coma flotante, obtiene precisión finita. – AakashM
-1 para "no hacer la tarea", y también para pensar que 'System.Math' es parte de C# (pista: es parte de.NET Framework). –