Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Ищу ответ на задачу


Автор: cppGhost 21.8.2013, 14:38
Всем привет, недавно столкнулся с примерно такой задачей
Код

float x = 0;
...
bool res = (x == x);

что необходимо вставить вместо ..., чтобы res было равно false. думал переполнить или задать слишком маленькое - не получилось. Раскройте секрет =))

Автор: Amp 21.8.2013, 14:42
nan

Автор: cppGhost 21.8.2013, 14:46
вот сейчас смотрю в google и совсем не понимаю, как это тут использовать. все равно спасибо

Автор: Amp 21.8.2013, 17:07
Если речь о плюсах
Код

...
x = std::numeric_limits<float>::quiet_NaN()
...

Автор: cppGhost 21.8.2013, 17:55
Спасибо. Хотя у меня все же осталось ощущение, что это как-то слишком уж умно. Ведь для таких задач, решение обычно является общедоступным.

Автор: Amp 21.8.2013, 22:18
Цитата(cppGhost @  21.8.2013,  17:55 Найти цитируемый пост)
Ведь для таких задач, решение обычно является общедоступным. 

Для C++ std::numeric_limits<T> является стандартным способом получения всяких числовых констант, связанных с указанным в шаблоне типом. Для чистого C, насколько мне известно, стандартного определения NaN в заголовочных файлах нет - зависит от компилятора.

Автор: feodorv 22.8.2013, 00:10
Для Microsoft Visual C++ следующий код
Код

#include <stdio.h>
#include <math.h>

int main( void )
{
  float a = 0;
  float b = 0;

  a = a / b;
  printf( "IsNan %s, _isnan %s\n", (a != a) ? "true" : "false", _isnan(a) ? "true" : "false");
  a = sqrt( -1 );
  printf( "IsNan %s, _isnan %s\n", (a != a) ? "true" : "false", _isnan(a) ? "true" : "false");
}


выдаёт такие результаты:
Цитата

IsNan false, _isnan true
IsNan false, _isnan true


и как его заставить работать иначе, не знаю...

Автор: cppGhost 22.8.2013, 18:41
Вот, точно. Ответ проще
Код

float x = 0.0;
x /= 0;
bool res = (x == x); // res = false;

Автор: volatile 25.8.2013, 16:07
Цитата(feodorv @  22.8.2013,  00:10 Найти цитируемый пост)
Для Microsoft Visual C++ ... ...  выдаёт такие результаты:
IsNan false, _isnan true
IsNan false, _isnan true

Наверное старая студия?

2008 выдает:
Код

IsNan true, _isnan true
IsNan true, _isnan true

Автор: feodorv 25.8.2013, 19:51
Цитата(volatile @  25.8.2013,  17:07 Найти цитируемый пост)
Наверное старая студия?

Да, студия старая, я бы даже сказал, устаревшая)))

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