Lors de l'appel de Double.IsNaN()
avec Double.PositiveInfinity
comme argument, le résultat est faux. C'est contre mon intuition puisque l'infini n'est pas un nombre. Apparemment, "NaN" n'existe qu'en termes de constante dans .NET, est-ce décrit par la norme IEEE ou s'agit-il d'un détail d'implémentation personnalisé? Existe-t-il un moyen plus court de vérifier si un Double
est "NaN" que:
(Double.IsNaN(d) || Double.IsPositiveInfinity(d) || Double.IsNegativeInfinity(d))
ou
(Double.IsNaN(d) || Double.IsInfinity(d))
Comme le dit MSDN, NaN signifie que le résultat n'est pas défini. Avec des infinis le résultat est défini:
Une méthode ou un opérateur renvoie NaN lorsque le résultat d'une opération n'est pas défini. Par exemple, le résultat de la division de zéro par zéro est NaN, comme le montre l'exemple suivant. (Mais notez que la division d'un nombre non nul par zéro renvoie soit PositiveInfinity ou NegativeInfinity, selon le signe du diviseur.)
Donc, ce n'est pas une bonne idée de suivre les infinis comme NaN. Vous pouvez écrire une méthode d'extension pour vérifier si la valeur n'est pas NaN ou infini:
// Or IsNanOrInfinity
public static bool HasValue(this double value)
{
return !Double.IsNaN(value) && !Double.IsInfinity(value);
}
Il existe trois valeurs spéciales dans le type Double
, qui est basé sur norme IEEE 754 . L'un est l'infini positif, un autre est l'infini négatif et le dernier est le Not-a-Number (NaN). La méthode Double.IsNaN
Ne fait que vérifier si la valeur de la variable est cette valeur NaN spéciale.