std::numeric_limits<T>::quiet_NaN
static T quiet_NaN() throw(); | (до C++11) | |
static constexpr T quiet_NaN() noexcept; | (с C++11) |
Возвращает специальное значение "тихое не число", как представлено типом с плавающей точкой T. Имеет смысл только, если std::numeric_limits<T>::has_quiet_NaN == true. В IEEE 754, наиболее распространённом двоичном представлении чисел с плавающей точкой, любое значение с установленными битами порядка и по меньшей мере одним установленным битом мантиссы представляет собой NaN. Реализация определяет, какие значения мантиссы представляют собой тихие или сигнализирующие NaN, и имеет ли бит знака какое-либо значение.
Значение возврата
T | std::numeric_limits<T>::quiet_NaN() |
|---|---|
| /* неспециализированная */ | T() |
| bool | false |
| char | 0 |
| signed char | 0 |
| unsigned char | 0 |
| wchar_t | 0 |
| char8_t (с C++20) | 0 |
| char16_t (с C++11) | 0 |
| char32_t (с C++11) | 0 |
| short | 0 |
| unsigned short | 0 |
| int | 0 |
| unsigned int | 0 |
| long | 0 |
| unsigned long | 0 |
| long long (с C++11) | 0 |
| unsigned long long (с C++11) | 0 |
| float | определено реализацией (может быть NAN) |
| double | определено реализацией |
| long double | определено реализацией |
Примечания
NaN никогда не сравнивается с собой. Копирование NaN может не сохранить его битовое представление.
Пример
Несколько способов генерации NaN (строка вывода зависит от компилятора):
#include <iostream>
#include <limits>
#include <cmath>
int main()
{
std::cout << std::numeric_limits<double>::quiet_NaN() << ' ' // nan
<< std::numeric_limits<double>::signaling_NaN() << ' ' // nan
<< std::acos(2) << ' ' // nan
<< std::tgamma(-1) << ' ' // nan
<< std::log(-1) << ' ' // nan
<< std::sqrt(-1) << ' ' // -nan
<< 0 / 0.0 << '\n'; // -nan
std::cout << "NaN == NaN? " << std::boolalpha
<< ( std::numeric_limits<double>::quiet_NaN() ==
std::numeric_limits<double>::quiet_NaN() ) << '\n';
}Возможный вывод:
nan nan nan nan nan -nan -nan NaN == NaN? false
См. также
|
[статическое] | определяет типы с плавающей точкой, которые могут представлять специальное значение "тихое не число" (NaN) (публичная статическая константа) |
|
[статическое] | возвращает значение сигнализирующего NaN заданного типа с плавающей точкой (публичная статическая функция-член) |
|
(C++11)(C++11)(C++11) | не число (NaN) (функция) |
|
(C++11) | проверяет, является ли данное число NaN (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/numeric_limits/quiet_NaN