Почему sin (45) и cos (45) дают разные результаты? [Дубликат]

На этот вопрос уже есть ответ:

Математика с плавающей точкой нарушена? 28 ответов

Этого я и не ожидал. Я знаю, что эти цифры не являются точными на 100%, но я не ожидал, что дополнительные углы дадут разные результатыsin а такжеcos:

Эта следующая функция возвращает0.70710678118654746000000...

sin(45 * PI / 180.0);

пока эта функция возвращает0.70710678118654757000000...

cos(45 * PI / 180.0);

так что это

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

и не только те ...sin(1 * PI / 180.0) также возвращает немного другое число, чемcos(89 * PI / 180.0) хотя они должны быть одинаковыми.

Более того, это не толькоsin противcos проблема, это тожеsin противsin проблема:sin(1 * PI / 180.0) возвращает значение, отличное отsin(179 * PI / 180.0) опять они должны быть одинаковыми.

Я пытался использовать радианы, а не градусы, и разница точно такая же, я пытался использовать маленькое значение PI, огромное значение PI (около 100 десятичных знаков и более), и они все еще разные, я пытался использоватьcmath вместо тогоmath.h, Я пытался использоватьM_PI вместоPI определил сам.

Разница всегда одна и та же, около 16-го знака после запятой. Не поймите меня неправильно, я знаю, что никогда не получу 100% точное значение этих чисел, но, по крайней мере, я ожидал получить такое же "неточное" значениеsin а такжеcos дополнительных углов. Что, черт возьми, не так со всем этим?

Мне нужно, чтобы они были такими же, потому что программа, над которой я работаю (симулятор гравитации меня попросили), использует объекты, которые имеютdouble (Я тоже пробовалfloat) переменные, которые в основном являются углами (градусы или радианы, я пробовал оба). Это те направления, по которым объекты перемещаются, также мне нужны углы для расчета взаимодействия между объектами.

Углы меняются на каждой итерации программы, и на каждой итерации углы изменяются в зависимости от вычислений на углах предыдущей итерации, поэтому, если в любой точке есть какое-либо минимально неправильное значение угла, эта ошибка усиливается все больше и больше в каждая итерация.

Программа выполняет тысячи и даже миллионы итераций, поэтому ошибка значения становится невероятно огромной! Проще говоря, планеты в конечном итоге выходят из равновесия, и все становится катастрофой, я действительно злюсь:

P.s. Я на Windows 7, 32 бита.