Spec-Zone.ru › C++

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()
/* non-specialized */ T()
bool false
char 0
signedchar 0
unsignedchar 0
wchar_t 0
char8_t (начиная с C++20) 0
char16_t (начиная с C++11) 0
char32_t (начиная с C++11) 0
short 0
unsignedshort 0
int 0
unsignedint 0
long 0
unsignedlong 0
longlong (начиная с C++11) 0
unsignedlonglong (начиная с C++11) 0
float определяется реализацией (может быть NAN)
double определяется реализацией
longdouble определяется реализацией

Примечания

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

См. также

has_quiet_NaN
[static]
определяет типы с плавающей точкой, способные представлять специальное значение «тихое не число» (NaN)
(общедоступная статическая константа-член)
signaling_NaN
[static]
возвращает значение сигнального NaN заданного типа с плавающей точкой
(общедоступная статическая функция-член)
nannanfnanl
(C++11)(C++11)(C++11)
не число (NaN)
(функция)
isnan
(C++11)
проверяет, является ли заданное число NaN
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/numeric_limits/quiet_NaN

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API