> Java > java지도 시간 > 본문

반올림 오류를 최소화하면서 복식에서 소수 자릿수를 정확하게 이동하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-11-24 22:38:11
원래의
708명이 탐색했습니다.

How Can I Accurately Shift Decimal Places in Doubles While Minimizing Rounding Errors?

복식의 소수 자릿수 조작: 반올림 오류 해결

정밀도는 숫자 연산의 중요한 측면으로, 특히 부동 소수점 데이터를 다룰 때 더욱 그렇습니다. 더블 같은 종류. 곱셈이나 나눗셈을 사용하여 소수 자릿수를 이동하려고 하면 반올림 오류가 발생합니다. 이 기사에서는 복식에서 소수 자릿수 이동의 미묘한 차이를 조사하고 반올림 오류를 완화하는 기술을 살펴봅니다.

문제: 곱셈을 사용하여 소수 자릿수 이동

1234가 다음과 같은 시나리오를 생각해 보세요. double로 저장되며 목표는 소수점 자리를 이동하여 12.34를 얻는 것입니다. 아래 코드 조각에 설명된 것처럼 1234에 0.1을 두 번 곱하면 정확히 12.34라는 원하는 결과가 나오지 않습니다.

double x = 1234;
for(int i=1;i<=2;i++) {
  x = x*.1;
}
System.out.println(x); // Prints: 12.340000000000002
로그인 후 복사

원인: 부동 소수점 표현의 부정확성

근본적인 문제는 0.1을 이중으로 정확하게 표현할 수 없다는 것입니다. 곱셈을 두 번 수행하면 이 오류가 합성되어 최종 값에 약간의 편차가 발생합니다.

해결책: 10의 거듭제곱으로 나누기

복합 오류를 방지하려면 나누기를 고려하세요. x를 100으로 늘립니다. 100은 정확하게 두 배로 표현될 수 있으므로 이 접근 방식은 올바른 결과를 제공합니다.

double x = 1234;
x /= 100;
System.out.println(x); // Prints: 12.34
로그인 후 복사

BigDecimal: Handling Precise Arithmetic

절대 정밀도가 필요한 시나리오의 경우 다음을 사용하는 것이 좋습니다. BigDecimal. double 또는 float와 달리 BigDecimal은 반올림 오류 없이 소수 연산을 처리할 수 있습니다. 그러나 기본 숫자 유형에 비해 성능이 저하될 수 있습니다.

반올림 오류: 이해 및 완화

반올림 오류는 부동 소수점 계산에 내재되어 있습니다. 배정밀도는 15~16개의 유효 자릿수를 허용합니다. 즉, 작은 반올림 오류가 여러 작업에 걸쳐 누적될 수 있습니다. 위에서 설명한 대로 10의 거듭제곱으로 나누면 이러한 오류를 완화하는 데 도움이 되지만 모든 시나리오에서 오류가 없는 것은 아닙니다.

나눗셈 및 곱셈에 대한 참고 사항

중요합니다. x / 100과 x * 0.01은 반올림 오류의 불일치로 인해 서로 바꿔 사용할 수 없습니다. 나눗셈은 x 값에 따라 달라지며, 0.01은 고정된 반올림 오차가 있습니다.

위 내용은 반올림 오류를 최소화하면서 복식에서 소수 자릿수를 정확하게 이동하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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