Namespaces
Variants

std::numeric_limits<T>::quiet_NaN

С сайта ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (основные типы, RTTI)
Макросы для проверки возможностей библиотеки (C++20)
Утилиты программ
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
 
 
 
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
(функция)