Мне нужно получить -nan
только double
Тип и арифметика.Как получить -nan на C++ 14?
Таким образом, код должен быть таким:
double a = ...
cout << a << endl;
-nan
где ...
некоторое выражение.
Мне нужно получить -nan
только double
Тип и арифметика.Как получить -nan на C++ 14?
Таким образом, код должен быть таким:
double a = ...
cout << a << endl;
-nan
где ...
некоторое выражение.
Вы можете использовать только std::nan
, например.
#include <iostream>
#include <cmath>
int main()
{
double a = -std::nan("1");
std::cout << a << std::endl;
}
Я буду отмечать этот вопрос как ответ, но я сказал, что вам нужно использовать только арифметику, поэтому ответ (INFINITY_NUMBER/INFINITY_NUMBER) = -NaN, но я думаю, что вы сделали этот ответ только причиной моего плохого английского –
Прости, да, я вероятно, не интерпретировал ваш вопрос так, как вы предполагали. В чем причина этого ограничения? Представление ? Можете ли вы не просто инициализировать значение как константу? –
Если ваша платформа использует плавающие точки 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 с 0x80000000. Вам придется играть с литьем адреса в unsigned char * или long long *, или в курс.
«Нужна». Это домашнее задание? –