2017-05-12 6 views
0

C#でdoubleという値があるとします。GetHashCode()は、同じ倍精度結果を別の整数で取得できますか?

GetHashCode()が異なるコンピュータ/ウィンドウ/アーキテクチャ上でdoubleの異なる整数値を返す可能性はありますか?

public unsafe override int GetHashCode() { 
     double d = m_value; 
     if (d == 0) { 
      // Ensure that 0 and -0 have the same hash code 
      return 0; 
     } 
     long value = *(long*)(&d); 
     return unchecked((int)value)^((int)(value >> 32)); 
    } 
+0

可能であれば、何ですか? –

+0

GetHashCodeの結果は実装固有であるため、原則として「はい、なぜですか? – Pavel

答えて

2

Object.GetHashCode Methodは言う:

GetHashCodeメソッドのデフォルトの実装が異なるオブジェクトの一意の戻り値を保証するものではありません。さらに、.NET FrameworkではGetHashCodeメソッドの既定の実装が保証されておらず、返される値は.NET Frameworkの異なるバージョン間で同じになります。したがって、このメソッドのデフォルトの実装は、ハッシングの目的で一意のオブジェクト識別子として使用されてはなりません。

+0

ありがとうNemanja。非常に役立ちます。 – Vahid

+0

trueの場合、 'double'は' GetHashCode'実装をオーバーライドするので、これは質問には関係ありません。そして、それがしなかったとしても - 'ValueType'はオブジェクトの' GetHashCode'をオーバーライドします(そしてdoubleは構造体です)。 – Evk

+0

@Evkそれでは、double.GetHashCode()が異なる.Net上の2つの異なる整数を返すことは可能ですか?よくわかりません。 – Vahid

関連する問題