Est-ce possible d'assigner un NaN
à un double
ou float
en C/C++? Comme en JavaScript, vous faites: a = NaN
. Donc, plus tard, vous pouvez vérifier si la variable est un nombre ou non.
En C, NAN
est déclaré dans <math.h>
.
En C++, std::numeric_limits<double>::quiet_NaN()
est déclaré dans <limits>
.
Mais pour vérifier si une valeur est NaN, vous ne pouvez pas la comparer à une autre valeur NaN. À la place, utilisez isnan()
de <math.h>
En C ou std::isnan()
de <cmath>
En C++.
Comme d'autres l'ont fait remarquer, vous recherchez std::numeric_limits<double>::quiet_NaN()
bien que je dois dire que je préfère les documents cppreference.com . Surtout parce que cette déclaration est un peu vague:
N'existe que si std :: numeric_limits :: has_quiet_NaN == true.
et il était simple de comprendre ce que cela signifie sur ce site, si vous consultez leur section sur std::numeric_limits::has_quiet_NaN
il est écrit:
Cette constante est significative pour tous les types à virgule flottante et sa valeur est vraie si std :: numeric_limits :: is_iec559 == true.
comme expliqué ici si true
signifie que votre plate-forme prend en charge IEEE 754
la norme. Ce fil précédent explique que cela devrait être vrai dans la plupart des situations.
Cela peut être fait en utilisant les numeric_limits en C++:
http://www.cplusplus.com/reference/limits/numeric_limits/
Ce sont les méthodes que vous voulez probablement regarder:
infinity() T Representation of positive infinity, if available.
quiet_NaN() T Representation of quiet (non-signaling) "Not-a-Number", if available.
signaling_NaN() T Representation of signaling "Not-a-Number", if available.