Почему std :: isnan () возвращает false для двойной переменной со значением NAN - PullRequest
0 голосов
/ 21 мая 2018

Я решил использовать NAN (также пытался std::numeric_limits::quiet_NaN()) в качестве значения по умолчанию для аргумента функции, но когда я попытался проверить его с помощью std::isnan, он вернул false.В то же время значение было выведено на консоль с помощью qDebug(), и я увидел nan.

Также я попытался проверить на NAN, используя правило x != x.Он работал для NAN != NAN, но получил false для x != x.

Последняя попытка была определить NAN двойную переменную внутри функции и попытаться проверить ее, используя оба метода, но это привело кте же результаты.

Не могу понять, что не так.

Пример:

double abc = NAN;
qDebug()<< abc << (abc != abc) << std::isnan(abc);

Вывод:

nan false false

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

std::optional<double> будет делать это, и тогда на досуге вы можете специализировать его, чтобы использовать явную битовую комбинацию NAN для указания неустановленного значения.Это значение не будет передано через регистры FPU, и -ffast-math не повлияет на него.Вы не только четко указали бы намерение необязательного аргумента, но и сделали бы его защищенным от компилятора:)

0 голосов
/ 21 мая 2018

Я не знал, что мы используем -ffast-math в нашем проекте.Вот что приводит к проблеме.Спасибо за ваше внимание и комментарии.Нет решения, если вы используете -ffast-math.Вам просто нужно искать другой способ решения вашей проблемы (без NAN)

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