> 백엔드 개발 > C++ > .NET에서 이중 곱셈이 깨졌나요?

.NET에서 이중 곱셈이 깨졌나요?

Patricia Arquette
풀어 주다: 2025-01-10 09:52:41
원래의
780명이 탐색했습니다.

Is Double Multiplication Broken in .NET?

.NET의 배정밀도 곱셈 정확도 문제에 대한 자세한 설명

C#에서 double i = 10 * 0.69; 식의 결과는 i에 예상되는 6.9 대신 6.89999999999999995 값이 할당된다는 것입니다. 이는 다음과 같은 질문을 제기합니다. .NET의 배정밀도 곱셈에 문제가 있습니까?

이진 표현과 부동 소수점 연산

이 동작을 이해하려면 이진 표현과 부동 소수점 산술의 미묘함을 깊이 이해해야 합니다. 부동 소수점 형식은 대략적으로 실수를 유한한 이진 값으로 나타내므로 정밀도 제한이 발생할 수 있습니다.

단순해 보이는 0.69는 이진수로 정확하게 표현할 수 없습니다. 이진수의 무한 반복 시퀀스가 ​​필요합니다. double 데이터 유형에 저장된 이진 표현은 대략 0.69입니다.

컴파일러 최적화 및 저장 상수

제공된 코드 조각에서 컴파일러는 곱셈을 수행하고 그 결과를 실행 파일에 상수로 저장하여 표현식을 최적화합니다. 이는 컴파일 타임에 값이 알려지기 때문입니다. 저장된 값은 6.9의 부동 소수점 근사치로 실제 값보다 약간 작습니다.

해결 방법 및 대체 데이터 유형

이 문제를 해결하고 더 정확한 결과를 얻으려면 반복되지 않는 소수 값을 더 높은 정밀도로 표현하도록 설계된 decimal 데이터 유형을 사용할 수 있습니다. decimal i = 10m * 0.69m; 표현식을 사용하면 6.9m이 생성됩니다.

위 내용은 .NET에서 이중 곱셈이 깨졌나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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