이것은 이진 및 원시 전문가 용입니다. 나는 float R3 벡터 구조체를 구현하고 "평등"에 대한 내 정의는 실제로 "거의 동일"합니다. 구체적으로, 비교 벡터 Abs ((a [i] - b [i])/(a [i] + b [i])의 모든 좌표에 대해 < .00001이 true를 반환합니다.GetHashCode() 오버로드가 semi-equal R3 float 벡터에 대해 동일하게 반환되도록하는 메서드
private static bool FloatEquality(float a, float b)
{
if (a == b)
{
return true;
}
else
{
float e;
try
{
e = (b - a)/(b + a);
}
catch (DivideByZeroException)
{
float g = float.Epsilon;
e = (b - a)/g;
}
//AppConsole.AppConsole.Instance.WriteLine(e);
if (e < .00001f && e > -.00001f)
{
return true;
}
else
{
return false;
}
}
}
내 문제로 인해 내가 "키"이러한 벡터를 사용할 수 있도록하려는 사실이 요구 사항을 충족 벡터에서 동일하게 나올 해시 값을 얻을 수있는 방법이 있는지 결정이다 사전.
위에서 알 수 있듯이 위 코드는 3 가지 좌표에서 평등을 확인하는 데 사용됩니다.
나는 세 개의 부동 소수점 좌표에서 바이트를 추출하고 각 중간에서 두 개를 사용하려고 생각했습니다.
(다음은 코드가 아니라 스택 오버플로 내가 그것을 들여 쓰기하지 않는 한 내가 그것을 게시하지 않습니다)
Vector(x,y,z):
x's float byte[] = [ x1 x2 x3 x3 ]
y's float byte[] = [ y1 y2 y3 y4 ]
z's float byte[] = [ z1 z2 z3 z4 ]
Hash code: byte[] {x2^x3 , y2^y3, z2^z3, x2^z3}
또는 그런 일을 ... 한마디로 - 내가 확인하는 방법 궁금 내 equals 메서드에 맞는 벡터의 해시 코드는 항상 똑같을 것입니다 ... 누군가가 매우 낮은 비용 계산으로 좋은 아이디어를 가지고 있다면, 나는 그것을 듣고 싶습니다. 또는 만약 당신이 float가 어떻게 저장되는지 그리고 위의 비교 방법이 똑같이 리턴한다면 어떤 바이트가 항상 같을 까에 대해 더 자세히 설명하는 곳으로 나를 안내 할 수 있다면. 정말 바이트 중 하나가 내 생각과 일치시킬 것이라는 점을 확실 할 수있는 방법이 없기 때문에
내가 ...