>백엔드 개발 >C++ >C#에서 `x == 0.1`이 `double x = 0.1`과 작동하지 않는 이유는 무엇입니까?

C#에서 `x == 0.1`이 `double x = 0.1`과 작동하지 않는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-22 20:51:13641검색

Why Doesn't `x == 0.1` Work with `double x = 0.1` in C#?

C#의 부동 소수점 수 비교: 소수 딜레마

C#에서는 double 유형의 값을 비교할 때 몇 가지 문제가 발생할 수 있습니다. 다음 코드를 고려해보세요:

<code class="language-csharp">double x = 0.1;
if (x == 0.1)
{
    // ...
}</code>

놀랍게도 이 코드에는 if 문이 들어가지 않습니다. 왜 이런가요?

부동소수점 수 문제

문제의 근본 원인은 컴퓨터가 부동 소수점 숫자(구체적으로 double)를 표현하는 방식에 있습니다. 정수와 달리 double는 소수 대신 이진 분수를 사용합니다. 이는 0.1과 같은 일부 소수 값을 정확하게 저장할 수 없음을 의미합니다.

예를 들어, 이진 표기법에서 0.1은 0.000110011001100110011001로 표시됩니다.... 컴퓨터는 이 무한 루프의 소수점을 유한 표현으로 자르는데, 이는 예상 값과 정확히 일치하지 않을 수 있습니다.

솔루션

이 문제를 해결하려면 다음과 같은 방법을 고려해 볼 수 있습니다.

  • decimal 유형 사용: decimal 유형은 소수 표기법을 사용하여 숫자를 저장하므로 정확한 표현이 가능합니다.
  • 엡실론 비교: 부동 소수점 숫자를 비교하려면 작은 오차 범위(예: Math.Abs(x - 0.1))를 사용하세요.

이유 설명

2진 분수는 특정 숫자를 표현하는 능력이 소수 분수와 다릅니다. 예를 들어, 숫자 1/10은 이진수로 정확하게 표시할 수 없으므로 이진수 확장은 약 0.0001100이 됩니다. 컴퓨터의 반올림 프로세스로 인해 부동 소수점 숫자를 저장할 때 부정확성이 발생합니다.

위 내용은 C#에서 `x == 0.1`이 `double x = 0.1`과 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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