Этого я не ожидал. Я знаю, что эти цифры не являются 100% точным, но я не ожидал, что дополнительные углы, дающие разные результаты sin
и cos
:Почему грех (45) и cos (45) дают разные результаты?
Эта функция возвращает 0.70710678118654746000000...
sin(45 * PI/180.0);
в то время как эта функция возвращает follwing 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
) переменными, которые в основном углами (градусы или радианы, я пробовал оба). Это направления, которые объекты используют для перемещения, также мне нужны углы для вычисления взаимодействий между объектами.
Углы изменяются на каждой итерации программы, и на каждой итерации углы изменяются, основываясь на расчетах на предыдущих углах итерации, поэтому, если в любой точке есть минимально неправильное значение угла, эта ошибка усиливается больше и больше на каждой итерации.
Программа запускает тысячи и даже миллионы итераций, поэтому ошибка значения становится абсурдно огромной! Выражаясь ясно, планеты в конечном итоге выйти из их баланса и все становится катастрофой, я действительно с ума :(
Ps Я на Windows 7, 32 бит.
Там только около 16 десятичных цифр точности в двойной. – ooga
Ну, я знаю, что я никогда не получу идеальную ценность для греха (45), такого значения не существует, идеального и круглого значения PI тоже не существует, но я, по крайней мере, ожидал, что дополнительные углы ошибося Точно так же:/ – Dimakhaerus
Возможно, вам захочется найти (или реализовать) символическую вычислительную библиотеку. Разумеется, вы будете жертвовать высокой точностью. –