Namespaces
Variants

std::numeric_limits<T>::signaling_NaN

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Koroutinen-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 Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap 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 signaling_NaN() throw();
(bis C++11)
static constexpr T signaling_NaN() noexcept;
(seit C++11)

Gibt den speziellen Wert "signaling Not-a-Number" zurück, wie er durch den Gleitkommatyp T dargestellt wird. Nur sinnvoll, wenn std::numeric_limits<T>::has_signaling_NaN == true. In IEEE 754, der gebräuchlichsten 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 für Quiet- oder Signaling-NaNs stehen, und ob das Vorzeichenbit bedeutsam ist.

Rückgabewert

T std:: numeric_limits < T > :: signaling_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 FLT_SNAN sein)
double implementierungsdefiniert (kann DBL_SNAN sein)
long double implementierungsdefiniert (kann LDBL_SNAN sein)

Hinweise

Ein NaN (Not a Number) vergleicht sich niemals als gleich mit sich selbst. Das Kopieren eines NaN muss laut IEEE-754 nicht seine Bitdarstellung (Vorzeichen und Payload ) erhalten, obwohl die meisten Implementierungen dies tun.

Wenn ein signalisierender NaN als Argument für einen arithmetischen Ausdruck verwendet wird, kann die entsprechende Gleitkomma-Ausnahme ausgelöst werden und der NaN wird "beruhigt", das heißt, der Ausdruck gibt einen stillen NaN zurück.

Beispiel

Demonstriert die Verwendung einer signalisierenden NaN, um eine Gleitkomma-Ausnahme auszulösen:

#include <cfenv>
#include <iostream>
#include <limits>
#pragma STDC_FENV_ACCESS on
void show_fe_exceptions()
{
    int n = std::fetestexcept(FE_ALL_EXCEPT);
    if (n & FE_INVALID)
        std::cout << "FE_INVALID is raised\n";
    else if (n == 0)
        std::cout << "no exceptions are raised\n";
    std::feclearexcept(FE_ALL_EXCEPT);
}
int main()
{
    double snan = std::numeric_limits<double>::signaling_NaN();
    std::cout << "After sNaN was obtained, ";
    show_fe_exceptions();
    double qnan = snan * 2.0;
    std::cout << "After sNaN was multiplied by 2, ";
    show_fe_exceptions();
    double qnan2 = qnan * 2.0;
    std::cout << "After the quieted NaN was multiplied by 2, ";
    show_fe_exceptions();
    std::cout << "The result is " << qnan2 << '\n';
}

Ausgabe:

After sNaN was obtained, no exceptions are raised
After sNaN was multiplied by 2, FE_INVALID is raised
After the quieted NaN was multiplied by 2, no exceptions are raised
The result is nan

Siehe auch

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