ksacvet777
Вот код иллюстрирующий проблему:
/ CppFloat.cpp : Defines the entry point for the console application. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float a = 100000000000000; float b = 0.1; float c = a+b; if( a == c ) printf("Err float"); else printf("all ok"); return 0; }
Конечно проблема в использовании в расчетах вместе с 100000000000000 других маленьких чисел. Поэтому я и посоветовал автору почитать, как хранится float в памяти.
Автор!
Кстати, если поменять float на double, то проблема исчезает. В том примере, который сверху.
у меня была похожая проблема, только со временем. через 18 минут после начала игры трупы начинали подпрыгивать, дальше больше, потом всё разлеталось с космическими скоростями.
А можно к double прибавлять float кстати функция D3DXMatrixLookAtLH отвечающая за камеру требует D3DXVECTOR3 в котором float как тут поступить? и ещё я повороты делаю векторами D3DXVECTOR3 получается мне свой класс вектора писать придётся?
kroonk
> А можно к double прибавлять float
Да, можно. Сначала float преобразовываешь в double, только потом прибавляешь.
> кстати функция D3DXMatrixLookAtLH отвечающая за камеру требует D3DXVECTOR3 в
> котором float как тут поступить?
Естественно перед отображением все преобразовать к float, а вести все расчеты в double.
kroonk
Забудь про double при рендере. Видеокарты им давятся.
kroonk
> FPS 2000
Фпсу нельзя давать становиться слишком большим. Если фпс выше 100-200, то пусть программа лучше холостые циклы мотает, или вызывает sleep между кадрами.
Сменил на double теперь если лететь прямо на какую-то ось то тряски нет но чем больше отклониться от оси(пик:45 градусов) то начинает трясти. Мне кажется проблема с вектором который я использую для направления(векторы вычисляются во float).
aloha_hawaii
> трупы начинали подпрыгивать
А игра была про зомбей? Может это АИ включился просто?
aloha_hawaii
> через 18 минут после начала игры трупы начинали подпрыгивать, дальше больше,
> потом всё разлеталось с космическими скоростями.
KpeHDeJIb
> А игра была про зомбей? Может это АИ включился просто?
^=^
Ф пёррлы !
ilusha_nil
> if( a == c ) printf("Err float");
итибя тож ф перлы
Что-то не получилось переделать вычисления векторов из float в double как можно исправить погрешность во float.
kroonk
> как можно исправить погрешность во float.
Не использовать такие большие числа. Открой секрет: а нафига оно надо?
-Eugene-
> а нафига оно надо?
Да я собрался игру про космос делать ну и решил реальные размеры брать то-есть максимальный размер системы 100 миллиардов километров получается 100000000000000 метров.
ksacvet777
В чем перл?
Тема в архиве.