_Double.PositiveInfinity
_を引数としてDouble.IsNaN()
を呼び出すと、結果は偽になります。無限は数ではないので、これは私の直感に反します。明らかに「NaN」は.NETの定数に関してのみ存在しますが、これはIEEE標準で記述されているのですか、それともカスタム実装の詳細ですか? Double
が「NaN」であるかどうかを確認するより短い方法はありますか:
_(Double.IsNaN(d) || Double.IsPositiveInfinity(d) || Double.IsNegativeInfinity(d))
_
または
_(Double.IsNaN(d) || Double.IsInfinity(d))
_
MSDNが言うように、 NaN は結果が未定義であることを意味します。無限大で結果が定義されます:
操作の結果が未定義の場合、メソッドまたは演算子はNaNを返します。たとえば、次の例に示すように、ゼロをゼロで除算した結果はNaNです。 (ただし、ゼロ以外の数値をゼロで除算すると、除数の符号に応じてPositiveInfinityまたはNegativeInfinityが返されることに注意してください。)
したがって、無限大をNaNとして扱うのは得策ではありません。拡張メソッドを記述して、値がNaNまたは無限大ではないかどうかを確認できます。
// Or IsNanOrInfinity
public static bool HasValue(this double value)
{
return !Double.IsNaN(value) && !Double.IsInfinity(value);
}
Double
タイプには3つの特別な値があり、これは IEEE規格754 に基づいています。 1つは正の無限大、もう1つは負の無限大、最後は非数(NaN)です。すべてDouble.IsNaN
メソッドは、変数の値がこの特別なNaN値であるかどうかを確認します。