Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2008, 14:30   #1
Niello
Пользователь
 
Регистрация: 08.10.2008
Сообщений: 15
По умолчанию Странная проблема с floating-point

Всем привет.

Ситуация следующая. Есть программа-пример, из котоорой заботливо передран код в мою собственную. Но результат не сходится. Ловил баг около суток, получил какой-то кошмар. Есть следующая строчка:

velocity.y=velocity.y+lastFrameAcce leration.y*duration;

в исходной программе. У меня она же:

Curr.LinearVelocity.y=Curr.LinearVe locity.y+Curr.LastFrameAcceleration .y*ElapsedTime;

Выполняется все это в цикле, там есть еще код. Если нужен будет, напишу.

Первые 53 итерации результаты полностью совпадают (как минимум до 12 знака после точки, дальше не проверял), на 54-й начинается бред. Вот лог расчетов для сравнения:

Оригинал:
---------------------------------------------------
Frame: 53, ElapsedTime= 0.001
lastFrameAcceleration=(0.0000000000 00;-9.810000419617;0.000000000000)
velocity=( 0.000000000000;-0.518545031548; 0.000000000000)
=================================== ========
Frame: 54, ElapsedTime= 0.001
lastFrameAcceleration=(0.0000000000 00;-9.810000419617; 0.000000000000)
velocity=( 0.000000000000;-0.528301894665; 0.000000000000)
=================================== =================================== ==============================

Мое:
---------------------------------------------------
Frame: 53, ElapsedTime= 0.001
lastFrameAcceleration=(0.0000000000 00;-9.810000419617; 0.000000000000)
velocity=( 0.000000000000;-0.518545031548; 0.000000000000)
=================================== =================================== ==============================
Frame: 54, ElapsedTime= 0.001
lastFrameAcceleration=(0.0000000000 00;-9.810000419617; 0.000000000000)
velocity=( 0.000000000000;-0.528301835060; 0.000000000000)
=================================== =================================== ==============================

Проверил руками в отладчике значения переменных - абсолютно одинаковые. Но результат выдает разный. В оригинале:

-0.51849186+(-9.8100004*0.001)=-0.52830189, у меня =-0.52830184.

Ошибка стабильная, т.е. всегда в 1 месте и с одинаковым отклонением. Или это у меня в ДНК ошибка. Подскажите, что я делаю неправильно, пожалуйста?

Я бы не парился, но отклонение накапливается и за несколько тысяч итераций очень сильно вредит. Да и вообще так быть не должно О_о

Заранее спасибо.
Niello вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
snmp+php странная проблема baarseek PHP 6 19.02.2009 14:02
Странная проблема при сложении double. Помогите разобраться. ivank Общие вопросы C/C++ 2 23.09.2008 13:04
Invalid floating point operation Skytis Помощь студентам 3 07.05.2008 12:16
Возникает ошибка Invalid floating point operation Иринкаа Помощь студентам 3 29.11.2007 22:10
при пустой ячейке выскакивает "is not a valid floating point value" ПОМОГИТЕ serserser Помощь студентам 17 14.11.2007 07:46