Проверьте переменную с плавающей точкой на наличие - PullRequest
2 голосов
/ 26 июля 2010

Я должен проверить переменную с плавающей точкой, чтобы определить существование конкретной переменной.В идеале это должно быть значение bool или, по крайней мере, int.Из-за ограничений интерфейса и устаревшего кода я не могу изменить тип данных на bool.Поэтому, если мне нужно сделать проверку, могу ли я сделать это напрямую, как показано ниже в примере кода:

    void check(float f)
    {
        if (!f)
            printf ("Zero val!\n");
        else
            printf ("Value exists!\n");
    }

Будет ли это доказательством дурака или есть лучший способ сделать это, учитываяФакт, как значение хранится в переменной с плавающей точкой.Преобразование в короткую позицию и проверка вне игры, потому что: если значение равно «1», оно сохраняется как 0.9999998;приведение его к короткому приведет к неправильному значению «0».

PS Код присутствует в файле Objective C, но в формате C.

1 Ответ

1 голос
/ 26 июля 2010

То, что у вас есть, будет работать с небольшим предупреждением, что он будет определять как положительный, так и отрицательный ноль как нулевые значения.Это может иметь или не иметь значения для ваших целей.Если вы работаете на платформе, которая не имеет стандартного поведения IEEE-754 (как и многие встраиваемые платформы), то ненормированные также могут пройти проверку !f, в зависимости от того, как ваш компилятор ее обрабатывает.Вероятно, это не проблема для вас, но об этом нужно знать.

Если вы должны сделать что-то подобное в будущем, вероятно, лучше использовать «не число» для обозначения неинициализированногоплавающие данные, которые вы затем можете проверить с помощью (f != f) или isnan(f).

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