Оценка значения с плавающей точкой совершенно неверна - PullRequest
0 голосов
/ 17 августа 2010

Привет интернет.У меня ОЧЕНЬ странная проблема в C. Я получаю значение с плавающей запятой, а затем проверяю, не превышает ли оно значение 0. Однако сравнение всегда оценивается как true, даже если значение меньше нуля.Вот код:

if (sVel > 0.0f)
{
    sVel += 1.0f;
    sVel -= 1.0f;
    NSLog(@"SEP VEL: %1.6f", sVel);
    return;
}

Итак, установка sVel в 100 печатает журнал как положено и попадает в оператор return;прохладно.Однако, установив sVel в -100, не распечатывает журнал и все равно попадает в оператор return.Я совершенно сбит с толку, и я не уверен, с чего начать выслеживать этого ...

Ответы [ 2 ]

6 голосов
/ 17 августа 2010

Похоже, вы отслеживаете код с помощью отладчика. Большинство компиляторов, вероятно, оптимизируют код, и будет выполнен тот же оператор возврата. Тогда может показаться, что вы переходите к коду возврата независимо от начального значения sVel.

Настоящим доказательством является заявление о печати. Поскольку журнал не распечатывается, это означает, что sVel была оценена правильно. Попробуйте поместить журнал за пределы блока if и посмотрите, когда он отобразится.

0 голосов
/ 17 августа 2010

Однако настройка sVel на -100 не распечатать журнал и все еще хиты возврат заявления.

Какое заявление о возврате? Если sVel отрицателен, он не должен ничего выполнять. Что будет после падения? Вы уверены, что он просто не возвращается из функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...