> 백엔드 개발 > C++ > C#에서 Double 값을 어떻게 안전하게 비교할 수 있나요?

C#에서 Double 값을 어떻게 안전하게 비교할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2025-01-22 21:01:12
원래의
885명이 탐색했습니다.

How Can I Safely Compare Double Values in C#?

C#에서 이중 값을 비교하는 안정적인 방법

C#에서는 부동 소수점 연산의 본질적인 한계로 인해 배정밀도 값을 비교하면 예상치 못한 결과가 발생하는 경우가 많습니다. 왜 이런 일이 발생하는지 이해하기 위해 부동 소수점 정밀도가 부족한 이유를 살펴보겠습니다.

부동소수점 정밀도가 부족함

float 및 double 데이터 유형은 숫자 값을 이진 형식으로 저장합니다. 이 형식은 본질적으로 0.1과 같은 간단한 소수 값을 포함하여 특정 숫자를 정확하게 표현하는 정밀도가 부족합니다. double에 0.1 값이 할당되면 실제로는 실제 십진수 값의 근사치인 이진 표현이 저장됩니다. 이러한 정밀도 부족은 십진수를 이진 분수로 변환하는 특성에서 비롯됩니다.

가능한 해결 방법

이중 값 비교를 효율적으로 처리하려면 다음 해결 방법을 고려하세요.

  1. double-to-double 값 비교: double 값을 비교할 때 일반적으로 항등 연산자(==)를 사용하지 않는 것이 좋습니다. 대신, 잠재적인 반올림 오류를 설명하기 위해 대략적인 비교 방법을 사용할 수 있습니다. 여기에는 일반적으로 공차 값을 정의하고 두 값 간의 차이가 해당 공차보다 작은지 비교하는 작업이 포함됩니다.

  2. Decimal 데이터 유형: 정확한 숫자 연산 및 비교를 위해 10진수 표기법으로 값을 저장하는 10진수 데이터 유형을 사용하는 것이 좋습니다. 이 접근 방식은 0.1과 같은 소수 값의 정확한 표현을 보장합니다.

추가 지침

부동 소수점 및 이중 저장소의 정밀도가 부족한 이유는 이진 표현이 1/2, 1/4 등과 같이 2의 거듭제곱인 숫자 값에 자연스럽게 맞기 때문입니다. 그러나 0.1(1/10)과 같은 특정 분모를 갖는 소수는 반올림 오류 없이 정확하게 이진수로 표현할 수 없습니다.

<code class="language-csharp">double x = 0.1;
double y = 0.1;
double tolerance = 0.000001; // 定义容差

if (Math.Abs(x - y) < tolerance) // 使用容差进行近似比较
{
    // 代码块
}</code>
로그인 후 복사

이 예에서는 Math.Abs()을 사용하여 두 double 값 사이의 절대 차이를 계산하고 이를 사전 정의된 허용오차와 비교하여 double 값을 보다 안정적으로 비교할 수 있는 방법을 보여줍니다. 적절한 공차 값을 선택하는 것은 특정 응용 프로그램 시나리오와 정확도 요구 사항에 따라 달라집니다.

위 내용은 C#에서 Double 값을 어떻게 안전하게 비교할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿