>백엔드 개발 >C++ >평등과 불평등에 대한 부동 소수점 숫자를 어떻게 비교해야 합니까?

평등과 불평등에 대한 부동 소수점 숫자를 어떻게 비교해야 합니까?

DDD
DDD원래의
2025-01-06 01:09:38423검색

How Should I Compare Floating-Point Numbers for Equality and Inequality?

Double.Epsilon을 사용하여 부동 소수점 숫자의 동일성 확인

MSDN 문서에서는 Double.Epsilon 상수보다 큰 값을 사용하여 설정하는 것을 제안합니다. 두 개의 부동 소수점 숫자가 동일한 것으로 간주될 수 있는지 여부를 결정할 때 허용되는 절대 차이 여유입니다. 그러나 이 권장 사항은 약간의 혼란을 야기합니다.

Double.Epsilon은 비교 시 실용적으로 사용됩니까?

MSDN 문구로 인해 Double의 실제 사용에 대한 오해가 발생했습니다. 엡실론. 제공된 답변에 명시된 대로 Double.Epsilon은 0이 아닌 표현 가능한 가장 작은 비정규 부동 소수점 값을 나타냅니다. 이는 단순히 비교에 허용되는 여백이 아니라 잘림 오류의 최소 크기를 나타냅니다.

동등성 비교에 적합한 엡실론 계산

동등성 비교의 경우 보다 실용적인 접근 방식은 다음을 사용하는 것입니다. 비교되는 값의 크기를 기반으로 하는 엡실론입니다. 예:

public static bool AboutEqual(double x, double y) {
    double epsilon = Math.Max(Math.Abs(x), Math.Abs(y)) * 1E-15;
    return Math.Abs(x - y) <= epsilon;
}

이 방법은 두 숫자의 절대값 중 더 큰 값에 작은 상수(1E-15)를 곱하여 허용 가능한 비교 여백을 결정합니다.

보다 큼과 작음 비교 고려

크거나 작음과 같은 비교의 경우 동일한 원칙이 적용됩니다. 엡실론은 잠재적인 잘림 오류를 설명하기 위해 비교되는 숫자의 크기를 기준으로 계산해야 합니다.

동등 및 불평등 비교를 위한 최상의 구현

요약하면 Double .Epsilon은 동등성, 초과, 미만, 미만 또는 동일 또는 크거나 같음에 대한 허용 가능한 여백으로 직접 사용할 수 없습니다. 부동 소수점 숫자. 대신 정확한 비교를 위해 상황별 엡실론을 계산해야 합니다.

위 내용은 평등과 불평등에 대한 부동 소수점 숫자를 어떻게 비교해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.