Half/Single/Doubleには、値が非数や無限大かどうかを調べる以下のメソッドが用意されています。

IsInfinityメソッド
値が正または負の無限大かどうか調べる。
値がPositiveInfinityまたはNegativeInfinityとなる場合はtrue、そうでなければfalseが返される。
IsPositiveInfinityメソッド
値が正の無限大かどうか調べる。
値がPositiveInfinityとなる場合はtrue、そうでなければfalseが返される。
IsNegativeInfinityメソッド
値が負の無限大かどうか調べる。
値がNegativeInfinityとなる場合はtrue、そうでなければfalseが返される。
IsNaNメソッド
値が非数かどうか調べる。
値がNaNとなる場合はtrue、そうでなければfalseが返される。
IsInfinity/IsNaNメソッドで値が無限大かどうか・非数かどうかを調べる
using System;

class Sample {
  static void IsSpecialValue(double d)
  {
    // 値が無限大かどうか、非数かどうかを調べる
    Console.WriteLine("[Value: {0}]", d);
    Console.WriteLine("IsInfinity? {0}", double.IsInfinity(d));
    Console.WriteLine("IsPositiveInfinity? {0}", double.IsPositiveInfinity(d));
    Console.WriteLine("IsNegativeInfinity? {0}", double.IsNegativeInfinity(d));
    Console.WriteLine("IsNaN? {0}", double.IsNaN(d));
    Console.WriteLine();
  }

  static void Main()
  {
    double d0 =  0.0;
    double d1 = +1.0 / 0.0;
    double d2 = -1.0 / 0.0;
    double d3 =  0.0 / 0.0;

    IsSpecialValue(d0);
    IsSpecialValue(d1);
    IsSpecialValue(d2);
    IsSpecialValue(d3);
  }
}
実行結果
[Value: 0]
IsInfinity? False
IsPositiveInfinity? False
IsNegativeInfinity? False
IsNaN? False

[Value: ∞]
IsInfinity? True
IsPositiveInfinity? True
IsNegativeInfinity? False
IsNaN? False

[Value: -∞]
IsInfinity? True
IsPositiveInfinity? False
IsNegativeInfinity? True
IsNaN? False

[Value: NaN]
IsInfinity? False
IsPositiveInfinity? False
IsNegativeInfinity? False
IsNaN? True