Как получить -nan на C++ 14?
Мне нужно получить -nan
используется только double
тип и арифметика.
Итак, код должен быть таким:
double a = ...
cout << a << endl;
-nan
где ...
это какое-то выражение.
3 ответа
Вы можете просто использовать std::nan
например,
#include <iostream>
#include <cmath>
int main()
{
double a = -std::nan("1");
std::cout << a << std::endl;
}
Если ваша платформа использует IEEE754 с плавающей точкой, то 0.0 / 0.0
будет оценивать в NaN.
В качестве альтернативы вы можете использовать std::numeric_limits<double>::quiet_NaN()
проверив это std::numeric_limits<double>::has_quiet_NaN
является true
на вашей платформе.
На самом деле не существует такой вещи, как подписанный NaN
хотя представление NaN
может содержать бит знака, который может быть взят std::cout
, Возможно на вашей платформе -0.0 / 0.0
генерирует "негатив" NaN
, Результат cout << a
для случая, когда a
является NaN
полностью зависит от компилятора.
Чтобы получить отрицательное значение Nan, просто ИЛИ представление NaN с 0x80000000. Вам придется поиграть с приведением адреса к неподписанному символу * или длинному длинному *, или к курсу.