Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Проверка float на NAN


Автор: Hukuma 9.10.2009, 08:38
Здравствуйте! Использую BCB 6. Возникла проблема с определением, является ли число типа float NAN. Использовал уже три варианта проверки

Код

#include <math.hpp>
float b; // значение у числа NAN
if(IsNan(b))
{
 /**/
}


Код

#include <float.h>
float b; // значение у числа NAN
if(_isnan(b))
{
   /**/
}


Код

float b; // значение у числа NAN
if(b!=b)
{
  /**/
}



Во всех трёх случаях при старте проверки выбрасывается ошибка "Invalid floating point operation". Подскажите пожалуйста, что я делаю не так? 

Автор: Hukuma 9.10.2009, 09:26

Видимо ошибка была в том, что первые две функции принимают аргумент типа double. Я попробовал staic_cast флоата в double, но не выходит. Если подавать double в функции, то всё нормально..

Автор: Alexeis 9.10.2009, 09:40
Цитата(Hukuma @  9.10.2009,  08:26 Найти цитируемый пост)
Видимо ошибка была в том, что первые две функции принимают аргумент типа double.

  Не согласен


Цитата

Boolean IsNan(Double AValueconst);
Boolean IsNan(Single AValueconst);
Boolean IsNan(Extended AValueconst);


В справке есть варианты для 4х, 8х, 10х байтов.

Добавлено через 1 минуту и 18 секунд
Single это тоже что float, просто это делфийский аналог. В С++ это должен быть псевдоним float.

Автор: Usper 9.10.2009, 09:58
У меня первый вариант работает (BCB6). В справке сказано: "Do not use NaN in comparisons". Следовательно третий вариант вроде и не должен работать.

Автор: Hukuma 9.10.2009, 11:19
Спасибо большое, покопаюсь тогда ещё, теперь хотя бы знаю, что это я что-то не так делаю smile 

Автор: Adjusly 24.1.2023, 00:59
Модератор: Сообщение скрыто.

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