C#のSingle.IsNaN()メソッドの使い方をサンプルコード付きで解説
C#のSingle.IsNaN()メソッドは、指定された単精度浮動小数点数が非数(NaN:Not a Number)であるかどうかを判定し、その結果をbool値として返すメソッドです。値がNaNの場合はtrue、それ以外の場合はfalseを返します。
構文
Single.IsNaN()メソッドの構文は以下の通りです。
public static bool IsNaN (float f);
パラメータ f には、判定対象となる単精度浮動小数点数(float型)を指定します。
なお、NaNは「0.0f / 0.0f」のような未定義の演算結果として発生する特別な値です。無限大(Infinity)はNaNではないため、IsNaN()ではfalseと判定される点に注意してください。
例1:無限大と通常の値の判定
まず、無限大になる値と通常の値に対してSingle.IsNaN()を使用する例を見てみましょう。
using System;
public class Demo {
public static void Main() {
float f1 = 5.0f/0.0f;
float f2 = 45.5f;
Console.WriteLine("Value1 = "+f1);
Console.WriteLine("Hashcode for Value1 = "+f1.GetHashCode());
Console.WriteLine("TypeCode for Value1 = "+f1.GetTypeCode());
Console.WriteLine("Is Value1 value is positive or negative infinity? = "+Single.IsInfinity(f1));
Console.WriteLine("Is Value1 NaN? = "+Single.IsNaN(f1));
Console.WriteLine("\nValue2 = "+f2);
Console.WriteLine("Hashcode for Value2 = "+f2.GetHashCode());
Console.WriteLine("TypeCode for Value2 = "+f2.GetTypeCode());
Console.WriteLine("Is Value2 value is positive or negative infinity? = "+Single.IsInfinity(f2));
Console.WriteLine("Is Value2 NaN? = "+Single.IsNaN(f2));
}
}
出力結果
上記のコードを実行すると、次のような出力が得られます。
Value1 = ∞ Hashcode for Value1 = 2139095040 TypeCode for Value1 = Single Is Value1 value is positive or negative infinity? = True Is Value1 NaN? = False Value2 = 45.5 Hashcode for Value2 = 1110835200 TypeCode for Value2 = Single Is Value2 value is positive or negative infinity? = False Is Value2 NaN? = False
この例では、「5.0f / 0.0f」の演算結果は正の無限大(∞)となるため、Single.IsInfinity()はTrueを返しますが、Single.IsNaN()はFalseを返します。一方、通常の値45.5fはどちらの判定においてもFalseとなります。
例2:NaNが発生するケース
次に、「0.0f / 0.0f」のように演算結果が数学的に未定義となり、実際にNaNが発生するケースを見てみましょう。
using System;
public class Demo {
public static void Main() {
float f1 = 5.0f/0.0f;
float f2 = 0.0f / 0.0f;
Console.WriteLine("Value1 = "+f1);
Console.WriteLine("Hashcode for Value1 = "+f1.GetHashCode());
Console.WriteLine("TypeCode for Value1 = "+f1.GetTypeCode());
Console.WriteLine("Is Value1 value is positive or negative infinity? = "+Single.IsInfinity(f1));
Console.WriteLine("Is Value1 NaN? = "+Single.IsNaN(f1));
Console.WriteLine("\nValue2 = "+f2);
Console.WriteLine("Hashcode for Value2 = "+f2.GetHashCode());
Console.WriteLine("TypeCode for Value2 = "+f2.GetTypeCode());
Console.WriteLine("Is Value2 value is positive or negative infinity? = "+Single.IsInfinity(f2));
Console.WriteLine("Is Value2 NaN? = "+Single.IsNaN(f2));
}
}
出力結果
実行すると、以下の出力が得られます。
Value1 = ∞ Hashcode for Value1 = 2139095040 TypeCode for Value1 = Single Is Value1 value is positive or negative infinity? = True Is Value1 NaN? = False Value2 = NaN Hashcode for Value2 = -4194304 TypeCode for Value2 = Single Is Value2 value is positive or negative infinity? = False Is Value2 NaN? = True
このように、「0.0f / 0.0f」の結果はNaNとなり、Single.IsNaN()はTrueを返します。このメソッドを活用することで、浮動小数点演算の結果が有効な数値かどうかを簡単にチェックでき、不正な計算結果によるバグを防ぐことができます。
-
C#のInt32.GetHashCode()メソッドとは?使い方をサンプルコード付きで解説
C#におけるInt32.GetHashCode()メソッドは、現在のint型インスタンスに対応するハッシュコードを返すメソッドです。ハッシュコードは、HashtableやDictionaryなどのハッシュベースのコレクションでオブジェクトを効率的に検索・管理するために利用される数値です。構文このメソッドの構文は以下の通りです。public override int GetHashCode();戻り値int型の値そのものに対応する32ビット符号付き整数のハッシュコードが返されます。なお、Int32の場合、ハッシュコードは元の値と同じ数値になります。これは、整数値自身がそのまま有効なハッシュコード
-
C#のInt16.GetHashCode()メソッドとは?使い方を実例付きで解説
C#におけるInt16.GetHashCode()メソッドは、現在のInt16インスタンス(short型の値)に対応するハッシュコードを返すためのメソッドです。ハッシュコードは、ハッシュテーブルなどのデータ構造でオブジェクトを効率的に管理する際に利用される整数値です。構文このメソッドの構文は以下のとおりです。public override int GetHashCode ();使用例1:基本的なハッシュコードの取得まずは、Int16.GetHashCode()メソッドを使って2つのshort型変数のハッシュコードを取得する基本的な例を見てみましょう。using System; public c