配列で最小値と最大値を見つける必要があります(この配列で可能なNaN値を考慮していません)。
これは でのみ簡単に作業できますdouble
が、これらの FindMin および FindMax 関数はジェネリック型で作業する必要があります。
この方法で一般的なNaNをテストしようとしました。
bool isNaN<T>(T value) where T : IEquatable<T>
{
return !value.Equals(value);
}
しかしEquals
、戻っtrue
てきますdouble.NaN
??!!
今のところ、次のような回避策があります。
bool isNaN<T>(T value) where T : IEquatable<T>
{
var d = value as double?;
if (d.HasValue) { return double.IsNaN(d.Value); }
return !value.Equals(value);
}
私の質問は、最初の解決策が機能しなかった理由を理解することです。これはバグですか?
ここで小さなテストコードを見つけることができます