Namespaces
Variants

std::numeric_limits<T>::quiet_NaN

Aus de.cppreference.net
 
 
Hilfsbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programmhilfsmittel
Variadische Funktionen
Koroutinenunterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (veraltet in C++20)
Ganzzahlvergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
 
static T quiet_NaN() throw();
(bis C++11)
static constexpr T quiet_NaN() noexcept;
(seit C++11)

Gibt den speziellen Wert "Quiet Not-a-Number" zurück, wie er durch den Gleitkommatyp T dargestellt wird. Nur sinnvoll, wenn std::numeric_limits<T>::has_quiet_NaN == true. In IEEE 754, der verbreitetsten binären Darstellung von Gleitkommazahlen, stellt jeder Wert, bei dem alle Bits des Exponenten gesetzt sind und mindestens ein Bit der Mantisse gesetzt ist, ein NaN dar. Es ist implementierungsdefiniert, welche Werte der Mantisse ein Quiet- oder Signaling-NaN darstellen und ob das Vorzeichenbit bedeutsam ist.

Rückgabewert

T std:: numeric_limits < T > :: quiet_NaN ( )
/* nicht spezialisiert */ T ( )
bool false
char ​ 0 ​
signed char ​ 0 ​
unsigned char ​ 0 ​
wchar_t ​ 0 ​
char8_t (seit C++20) ​ 0 ​
char16_t (seit C++11) ​ 0 ​
char32_t (seit C++11) ​ 0 ​
short ​ 0 ​
unsigned short ​ 0 ​
int ​ 0 ​
unsigned int ​ 0 ​
long ​ 0 ​
unsigned long ​ 0 ​
long long (seit C++11) ​ 0 ​
unsigned long long (seit C++11) ​ 0 ​
float implementierungsdefiniert (kann NAN sein)
double implementierungsdefiniert
long double implementierungsdefiniert

Hinweise

Ein NaN (Not a Number) vergleicht sich niemals als gleich mit sich selbst. Das Kopieren eines NaN kann seine Bitdarstellung nicht bewahren.

Beispiel

Mehrere Möglichkeiten, eine NaN zu erzeugen (die Ausgabezeichenkette ist compilerspezifisch):

#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';
}

Mögliche Ausgabe:

nan nan nan nan nan -nan -nan
NaN == NaN? false

Siehe auch

identifiziert Gleitkommatypen, die den speziellen Wert "ruhendes Not-a-Number" (NaN) darstellen können
(öffentliche statische Member-Konstante)
gibt einen signalisierenden NaN-Wert des gegebenen Gleitkommatyps zurück
(öffentliche statische Member-Funktion)
(C++11) (C++11) (C++11)
Not-a-Number (NaN)
(Funktion)
(C++11)
prüft, ob die gegebene Zahl NaN ist
(Funktion)