.net
의 이중 정밀 곱셈 정확도 문제에 대한 자세한 설명 C#에서 Double I = 10 * 0.69; 표현의 결과는
i 가 예상되는 6.9보다는 6.89999999999999995, 값이 할당된다는 것입니다. 이것은 .NET에서 이중 정밀 곱셈의 오류가 있습니까?
이진 표현 및 부동 소수점 작동 ]
이 동작을 이해하려면 이진 표현의 미묘함과 부동 소수점 작업에 대해 깊이 이해해야합니다. 부동 소수점 형식은 대략 유한 이진 값으로 실수를 나타내며 정밀한 제한을 초래할 수 있습니다.겉보기에 간단한 0.69는 바이너리에서 정확하게 표현할 수 없습니다. 이진수의 무한 루프가 필요합니다.
double 데이터 유형에 저장된 이진 표현은 대략 0.69입니다.
Constants는 컴파일러에 의해 최적화되고 저장되어 ]]]
제공된 코드 스 니펫에서 컴파일러는 곱셈을 수행하고 결과를 실행 파일에서 상수로 저장하여 표현식을 최적화합니다. 이 값은 컴파일 시간에 알려져 있기 때문에이를 수행합니다. 저장된 값은 6.9의 부동 소수점 근사치이며 실제 값보다 약간 작습니다.
솔루션 및 대체 데이터 유형 ]
이 문제를 해결하고보다 정확한 결과를 얻으려면, 10 진수 데이터 유형을 사용할 수 있으며, 이는 더 높은 정확도로 비 반복 소수 값을 나타내도록 설계되었습니다. 표현
Decimal i = 10m * 0.69m; 는 6.9m의 결과를 생성합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3