문제

가능한 정밀 손실을 무시하는 두 개의 복식을 비교할 수 있기를 원합니다. 이 사건을 이미 처리하는 방법이 있습니까?

그렇지 않다면, 두 복식 사이에 적절한 동등성이 얼마나되는지 알 수있는 임계 값/가이드 라인이 있습니까?

도움이 되었습니까?

해결책

임계 값은 문제 자체에 완전히 의존합니다. 일부 문제의 경우 1.001을 1.002와 동일하게 고려할 수 있으며 일부 문제의 경우 훨씬 더 작은 임계 값이 필요할 수 있습니다.

일반 기술은 다음과 같습니다.

Math.Abs(a - b) < some_epsilon    // `a` is roughly equivalent to `b`

다른 팁

이것에 대한 아주 좋은 옵션은 다음과 같습니다.

public static bool DoubleEquality(double a, double b) 
{
    const double epsilonValue = 1e-15;
    if (double.IsNaN(a))
        return double.IsNaN(b);
    else if (double.IsInfinity(a))
        return double.IsInfinity(b);
    else if (a == 0) 
        return b == 0;
    else
        return Math.Abs(a - b) <= Math.Abs(a * epsilonValue);
}

Double.epsilon은 이것에 대한 좋은 엡실론 가치가 아닙니다. 이것은 첫 번째 값의 크기로 다소 확장되는 엡실론을 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top