std::numeric_limits<T>:: signaling_NaN
|
static
T signaling_NaN
(
)
throw
(
)
;
|
(jusqu'à C++11) | |
|
static
constexpr
T signaling_NaN
(
)
noexcept
;
|
(depuis C++11) | |
Retourne la valeur spéciale « NaN signalé »
(Not-a-Number)
, telle que représentée par le type à virgule flottante
T
. N'a de sens que si
std::
numeric_limits
<
T
>
::
has_signaling_NaN
==
true
. Dans la norme IEEE 754, la représentation binaire la plus courante des nombres à virgule flottante, toute valeur dont tous les bits de l'exposant sont définis et au moins un bit de la mantisse est défini représente un NaN. Il est défini par l'implémentation quelles valeurs de la mantisse représentent des NaNs silencieux ou signalés, et si le bit de signe est significatif.
Table des matières |
Valeur de retour
T
|
std:: numeric_limits < T > :: signaling_NaN ( ) |
| /* non-spécialisé */ | T ( ) |
| bool | false |
| char | 0 |
| signed char | 0 |
| unsigned char | 0 |
| wchar_t | 0 |
| char8_t (depuis C++20) | 0 |
| char16_t (depuis C++11) | 0 |
| char32_t (depuis C++11) | 0 |
| short | 0 |
| unsigned short | 0 |
| int | 0 |
| unsigned int | 0 |
| long | 0 |
| unsigned long | 0 |
| long long (depuis C++11) | 0 |
| unsigned long long (depuis C++11) | 0 |
| float | défini par l'implémentation (peut être FLT_SNAN ) |
| double | défini par l'implémentation (peut être DBL_SNAN ) |
| long double | défini par l'implémentation (peut être LDBL_SNAN ) |
Notes
Un NaN ne se compare jamais égal à lui-même. La copie d'un NaN n'est pas requise, par IEEE-754, pour préserver sa représentation binaire (signe et payload ), bien que la plupart des implémentations le fassent.
Lorsqu'un NaN signalé est utilisé comme argument dans une expression arithmétique, l'exception en virgule flottante appropriée peut être levée et le NaN est "rendu silencieux", c'est-à-dire que l'expression retourne un NaN silencieux.
Exemple
Illustre l'utilisation d'un NaN signalétique pour déclencher une exception en virgule flottante :
#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'; }
Sortie :
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
Voir aussi
|
[static]
|
identifie les types à virgule flottante qui peuvent représenter la valeur spéciale "not-a-number signalant" (NaN)
(constante de membre statique publique) |
|
[static]
|
renvoie une valeur NaN silencieuse du type à virgule flottante donné
(fonction de membre statique publique) |
|
(C++11)
|
vérifie si le nombre donné est NaN
(fonction) |