>백엔드 개발 >C++ >내 C# 플로팅 포인트 비교가 부정확 한 이유는 무엇입니까?

내 C# 플로팅 포인트 비교가 부정확 한 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-31 04:11:08962검색

Why Are My C# Floating-Point Comparisons Inaccurate?

C# 플로팅 포인트 산술에서의 부정확성 이해

많은 프로그래밍 작업에서 정확도가 가장 중요합니다. 그러나 C#의 부동 소수점 수 (플로트 및 복식)는 고유 한 제한으로 인해 부정확 한 결과를 얻을 수 있습니다. 이유를 탐색합시다. 이 C# 코드 스 니펫을 고려하십시오

논리적으로

는 보다 커야합니다. 예상치 못한

결과는 컴퓨터에 부동 소수점 숫자가 저장되는 방식에서 비롯됩니다. 플로팅 포인트 숫자는 유한 한 비트를 사용하여 실수를 근사합니다. 예를 들어, 더블은 Mantissa에 대해 52 비트의 정밀도를 가지고 있습니다. 문제는 0.09와 같은 많은 소수점 숫자가 유한 이진 표현을 사용하여 정확하게 표현할 수 없다는 것입니다. 그들은 근사치로 저장됩니다.

예제의 곱셈 작업은 반올림 오류를 소개합니다.

의 근사치는 너무 가까워 질 정도로 차이가
<code class="language-csharp">float f1 = 0.09f * 100f;
float f2 = 0.09f * 99.999999f;

Console.WriteLine(f1 > f2); // Outputs: False</code>
데이터 유형의 정밀도 아래로 떨어져서 잘못된 비교로 이어집니다.

. 정확도 향상을위한 솔루션 : f1 이러한 부정확성을 완화하려면 이러한 접근법을 고려하십시오 f2 False

데이터 유형 사용 : 유형은 정밀도가 상당히 높아서 정확한 소수점 표현을 요구하는 재무 계산 및 상황에 이상적입니다.

.

Epsilon 비교 : f1 직접 비교 대신 공차 값 (Epsilon)을 사용하여 두 부동 소수점 숫자의 차이가 허용 가능한 범위 내에 있는지 확인하십시오. f2 float

부동 소수점 산술 이해 :

부동 소수점 표현과 산술의 뉘앙스에 익숙해 지십시오. "모든 컴퓨터 과학자가 부동 소수점 산술에 대해 알아야 할 것"과 같은 자원은 일반적인 함정을 피하는 데 귀중한 통찰력을 제공합니다. 이러한 한계를 이해하고 적절한 기술을 사용함으로써 부동 소수점 계산과 관련된 C# 프로그램에서보다 정확한 결과를 보장 할 수 있습니다.

위 내용은 내 C# 플로팅 포인트 비교가 부정확 한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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