Por que sin (45) e cos (45) dão resultados diferentes? [duplicado

Esta pergunta já tem uma resposta aqui:

A matemática do ponto flutuante está quebrada? 28 respostas

Isso é algo que eu não esperava. Sei que esses números não são 100% exatos, mas não esperava ângulos complementares que apresentassem resultados diferentes desin ecos:

Esta função a seguir retorna0.70710678118654746000000...

sin(45 * PI / 180.0);

enquanto esta função a seguir retornar0.70710678118654757000000...

cos(45 * PI / 180.0);

so é:

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

e não apenas aqueles ...sin(1 * PI / 180.0) também retorna um número ligeiramente diferente decos(89 * PI / 180.0) embora devam ser os mesmo

Moreover Não é apenas umsin vscos problema, também é umsin vssin problema:sin(1 * PI / 180.0) retorna um valor diferente desin(179 * PI / 180.0), novamente eles devem ser os mesmo

Eu tentei usar radianos e não graus, e há exatamente a mesma diferença, tentei usar um pequeno valor de PI, um enorme valor de PI (em torno de 100 decimais e mais) e eles ainda são diferentes, tentei usarcmath ao invés demath.h, Tentei usarM_PI em vez de umPI definido por mim.

A diferença é sempre a mesma, por volta do décimo sexto decimal. Não me interpretem mal, eu sei que nunca receberei um valor 100% preciso desses números, mas PELO MENOS eu esperava obter o mesmo valor "impreciso" desin ecos de ângulos complementares. O que diabos há de errado com tudo isso?

Eu preciso que eles sejam iguais, porque o programa em que estou trabalhando (um simulador de gravidade que me pediram para fazer) usa objetos que possuemdouble (Eu também tenteifloat) variáveis que são basicamente ângulos (graus ou radianos, tentei os dois). Essas são as direções que os objetos usam para se mover, também preciso dos ângulos para calcular as interações entre os objeto

Os ângulos mudam em todas as iterações do programa e em todas as iterações, os ângulos mudam com base nos cálculos dos ângulos da iteração anterior; portanto, se houver algum valor de ângulo minimamente errado a qualquer momento, esse erro será amplificado cada vez mais toda iteração.

O programa executa milhares e até milhões de iterações, portanto o erro do valor fica absurdamente grande! Para deixar claro, os planetas acabam se desequilibrando e tudo se torna um desastre. Estou muito bravo:

P.s. Estou no Windows 7, 32 bits.

questionAnswers(2)

yourAnswerToTheQuestion