Как получить -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;
}

LIVE DEMO

Если ваша платформа использует 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. Вам придется поиграть с приведением адреса к неподписанному символу * или длинному длинному *, или к курсу.

Другие вопросы по тегам