c# 의 부동 소수점 수정 이해를 이해합니다
플로팅 포인트 산술의 고유 한 부정확성은 종종 예상치 못한 결과로 이어집니다. 이 C# 코드 스 니펫 : 를 고려하십시오
출력 "False"는 반 직관적이며 두 계산 모두 9.0을 산출하는 것으로 보이므로 직관적입니다. 이 불일치는 부동 소수점 표현의 한계에서 발생합니다
IEEE 754 표준 부동 소수점 숫자는 분수 부품을 나타내는 유한 한 비트를 사용합니다. 이것은 많은 소수점 값이 정확하게 저장 될 수 없다는 것을 의미합니다. 그들은 근사됩니다. 값 및 계산 결과는 근사치입니다. 이러한 근사치는 종종 무의미하지만 예기치 않은 비교를 유발할 수 있습니다
따라서 평등의 부동 소수점 수를 직접 비교하는 것은 신뢰할 수 없습니다. 대신 공차 기반 비교를 사용하십시오 :
이 접근법은 와 사이의 절대적인 차이가 사전 정의 된 임계 값 (이 경우 0.0001) 아래에 있는지 확인합니다. 응용 프로그램의 필수 정밀도에 따라 임계 값을 조정하십시오
대안 적으로
(Double-Precision Floating-Point Number)를 사용하면 (단일-프레임)보다 더 높은 정밀도를 제공하여 이러한 부정확성의 가능성이 줄어 듭니다. 그러나 class Program
{
static void Main(string[] args)
{
float f1 = 0.09f * 100f;
float f2 = 0.09f * 99.999999f;
Console.WriteLine(f1 > f2); // Surprisingly prints "false"
}
}
로그인 후 복사
값조차도 오류의 마진이 적더라도 유사한 제한이 적용됩니다. 신뢰할 수있는 부동 소수점 계산에는 정밀 요구 사항을 신중하게 고려하는 것이 필수적입니다.위 내용은 부동 소수점 계산이 C#가 부정확 한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!