Namensräume
Varianten
Aktionen

std::numeric_limits<T>::quiet_NaN

Von cppreference.com
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstü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 (in C++20 veraltet)
 
 
 
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 vom Fließkommatyp T dargestellt wird. Nur sinnvoll, wenn std::numeric_limits<T>::has_quiet_NaN == true. In IEEE 754, der gebräuchlichsten Binärdarstellung von Fließkommazahlen, repräsentiert jeder Wert, bei dem alle Bits des Exponenten gesetzt sind und mindestens ein Bit des Bruchteils gesetzt ist, eine NaN. Es ist implementierungsabhängig, welche Werte des Bruchteils quiet oder signaling NaNs darstellen und ob das Vorzeichenbit aussagekräftig ist.

Inhalt

[bearbeiten] 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 implementierungsabhängig (kann NAN sein)
double implementierungsdefiniert
long double implementierungsdefiniert

[bearbeiten] Hinweise

Eine NaN ist niemals gleich sich selbst. Das Kopieren einer NaN erhält möglicherweise nicht deren Bitdarstellung.

[bearbeiten] Beispiel

Mehrere Möglichkeiten, eine NaN zu erzeugen (die Ausgabe 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

[bearbeiten] Siehe auch

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