> 백엔드 개발 > C++ > C#의 부동 소수점 산술이 왜 동일한 값을 비교할 때 예상치 못한 결과를 생성합니까?

C#의 부동 소수점 산술이 왜 동일한 값을 비교할 때 예상치 못한 결과를 생성합니까?

Patricia Arquette
풀어 주다: 2025-01-31 04:12:11
원래의
822명이 탐색했습니다.

Why Does Floating-Point Arithmetic in C# Produce Unexpected Results When Comparing Seemingly Equal Values?
C# 플로팅 포인트 산술 : 정밀 및 비교 함정

c#의 부동 소수점 산술은 편리하지만 유한 한 표현으로 인해 고유 한 부정확성을 겪고 있습니다. 이것은 겉보기에 동일한 값을 비교할 때 예상치 못한 결과로 이어질 수 있습니다. <:>이 예를 고려하십시오 : 출력은 반 직관적입니다. 왜? C#의 32 비트 플로트는 정밀도가 제한되어 있기 때문에 (약 23 개의 유의 한 비트). 와 관련된 계산은 반올림 오류를 소개합니다. 와

>가 가까이 나타나는 반면, 둥근 부동 소수점 표현은 약간 다르므로

return . 이것은 중요한 한계를 강조합니다. 부동 소수점 수의 직접 평등 또는 불평등 비교는 신뢰할 수 없습니다. 인간의 관찰에 눈에 띄지 않는 미세한 차이는 비교가 실패 할 수 있습니다.

이러한 문제를 피하려면 직접 평등 점검을 피하십시오. 대신 공차 기반 비교를 사용하십시오 :

이 함수는 두 플로트 사이의 절대적인 차이가 사전 정의 된 보다 적은지 확인합니다. 적절한 를 선택하는 것은 컨텍스트와 예상 정밀도 수준에 따라 다릅니다. 더 높은 정확성을 위해 대신

를 사용하는 것을 고려하십시오. 그러나
<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        float f1 = 0.09f * 100f;
        float f2 = 0.09f * 99.999999f;

        Console.WriteLine(f1 > f2); // Outputs "false"
    }
}</code>
로그인 후 복사
조차도 정밀도가 높지만 비슷한 제한이 적용됩니다.

위 내용은 C#의 부동 소수점 산술이 왜 동일한 값을 비교할 때 예상치 못한 결과를 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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