Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Сравнение переменных


Автор: ecspertiza 23.9.2009, 15:27
У меня такой вопрос в OpenGL переменные сравниваются также как и везде или каким то другим методом???

ибо у меня есть две переменных changeZ и modifiedZ обе GLfloat

в тот момент когда обе переменные равны софт это не обраатывает вот код

Код

        if (changeZ > modifiedZ)
        {
            qDebug() << "changeZ > modifiedZ";
            modifiedZ += 0.1;
        }else if (changeZ < modifiedZ)
        {
            qDebug() << "changeZ < modifiedZ";
            modifiedZ -= 0.1;
        }else
        {
            qDebug() << "changeZ == modifiedZ";
        }


делаю вывод на консоль он мне говорит о том что обе переменные равны допустим 2 но программа обрабатывает 

changeZ > modifiedZ

Это чудеса? или магия? или мне пойти об стену убиться?


Автор: ecspertiza 24.9.2009, 08:34
Хахаха!!!! Я не псих smile 

вот накидал тестовый пример, переменные не сравниваются, или я чего то не догоняю??? 

Автор: ecspertiza 24.9.2009, 09:01
Ну а если без тупняков, то вопрос в общем такой есть анимация просто передвижение текстуры,  и передвигается она с помощью наращивания одной из переменной на 0.1 за один тик таймера, ну и естественно возникает такой момент когда её нужно остановить, а это сделать не получается ибо переменные не сравниваются, я думаю те кто пишет на OpenGL почти каждый день такие проблемы решают, может чего подскажите? очень хотелось бы.

Автор: Solomon 25.9.2009, 14:13
тут OpenGl непричем... просто обыкновенная погрешнасть float

Цитата(ecspertiza @  23.9.2009,  14:27 Найти цитируемый пост)
делаю вывод на консоль он мне говорит о том что обе переменные равны допустим 2 но программа обрабатывает 

а ты в дебаге посмотри) там одна может быть 2,00004 а вторая 2,00003... 

замени float на int и все будет smile 

Автор: Static 13.10.2009, 14:57
Цитата(Solomon @  25.9.2009,  13:13 Найти цитируемый пост)
замени float на int и все будет

это, как говорится, зависит... Правильнее все же сравнить с эпсилон
Код

float a;
float b;

if ( fabs( a - b ) > 0.00001 ) //не равны
;
else // равны
;

Автор: Rickert 14.10.2009, 01:31
http://forum.vingrad.ru/forum/topic-56118/view-all.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)