¿Por qué sin (45) y cos (45) dan resultados diferentes? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Las matemáticas de punto flotante están rota 28 respuestas

Esto es algo que no esperaba. Sé que estos números no son 100% exactos, pero no esperaba ángulos complementarios que dieran resultados diferentes desin ycos:

Esta función siguiente devuelve0.70710678118654746000000...

sin(45 * PI / 180.0);

mientras que esta función siguiente devuelve0.70710678118654757000000...

cos(45 * PI / 180.0);

so, es:

0.707106781186547**46**000000... vs
0.707106781186547**57**000000...

y no solo esos ...sin(1 * PI / 180.0) también devuelve un número ligeramente diferente quecos(89 * PI / 180.0) aunque deberían ser lo mismo.

Además, no es solo unasin vscos problema, también es unsin vssin problema:sin(1 * PI / 180.0) devuelve un valor diferente quesin(179 * PI / 180.0), nuevamente deberían ser lo mismo.

Traté de usar radianes y no grados, y hay exactamente la misma diferencia, traté de usar un valor PI pequeño, un valor PI enorme (alrededor de 100 decimales y más) y todavía son diferentes, intenté usarcmath en lugar demath.h, Intenté usarM_PI en vez de unaPI definido por mí mismo.

La diferencia es siempre la misma, alrededor del decimosexto decimal. No me malinterpreten, sé que nunca obtendré un valor 100% preciso de estos números, pero AL MENOS esperaba obtener el mismo valor "impreciso" desin ycos de ángulos complementarios. ¿Qué demonios está mal con todo esto?

Necesito que sean iguales porque el programa en el que estoy trabajando (un simulador de gravedad que me pidieron que haga) usa objetos que tienendouble (También probéfloat) variables que son básicamente ángulos (grados o radianes, he intentado ambos). Esas son las direcciones que usan los objetos para moverse, también necesito los ángulos para calcular las interacciones entre los objetos.

Los ángulos cambian en cada iteración del programa, y en cada iteración, los ángulos cambian basándose en los cálculos de los ángulos de la iteración anterior, por lo que si hay un valor de ángulo mínimamente incorrecto en cualquier punto, ese error se amplifica más y más en cada iteración.

El programa ejecuta miles e incluso millones de iteraciones, por lo que el error del valor se vuelve absurdamente enorme. Para aclararlo, los planetas eventualmente pierden el equilibrio y todo se convierte en un desastre, estoy realmente enojado:

PD. Estoy en Windows 7, 32 bits.

Respuestas a la pregunta(2)

Su respuesta a la pregunta