복식의 소수 자릿수 조작: 반올림 오류 해결
정밀도는 숫자 연산의 중요한 측면으로, 특히 부동 소수점 데이터를 다룰 때 더욱 그렇습니다. 더블 같은 종류. 곱셈이나 나눗셈을 사용하여 소수 자릿수를 이동하려고 하면 반올림 오류가 발생합니다. 이 문서에서는 복식에서 소수 자릿수 이동의 미묘한 차이를 조사하고 반올림 오류를 완화하는 기술을 살펴봅니다.
문제: 곱셈을 사용하여 소수 자릿수 이동
1234가 다음과 같은 시나리오를 생각해 보세요. double로 저장되며 목표는 소수점 자리를 이동하여 12.34를 얻는 것입니다. 아래 코드 조각에 표시된 것처럼 1234에 0.1을 두 번 곱하면 정확히 원하는 결과인 12.34가 생성되지 않습니다.
double x = 1234; for(int i=1;i원인: 부동 소수점 표현의 부정확성
기본적인 문제는 0.1을 이중으로 정확하게 표현할 수 없다는 것입니다. 곱셈을 두 번 수행하면 이 오류가 복잡해져서 최종 값에 약간의 편차가 발생합니다.
해결책: 10의 거듭제곱으로 나누기
복리 오류를 방지하려면 나누기를 고려하세요. x를 100으로 늘립니다. 100은 정확하게 double로 표시될 수 있으므로 이 접근 방식은 올바른 결과를 제공합니다.
double x = 1234; x /= 100; System.out.println(x); // Prints: 12.34BigDecimal: 정확한 산술 처리
절대 정밀도가 필요한 시나리오의 경우 BigDecimal 사용을 고려하세요. double 또는 float와 달리 BigDecimal은 반올림 오류 없이 소수 연산을 처리할 수 있습니다. 그러나 기본 숫자 유형에 비해 성능이 저하될 수 있습니다.
반올림 오류: 이해 및 완화
반올림 오류는 부동 소수점 계산에 내재되어 있습니다. 배정밀도는 15~16개의 유효 자릿수를 허용합니다. 즉, 작은 반올림 오류가 여러 작업에 걸쳐 누적될 수 있습니다. 위에 설명된 대로 10의 거듭제곱으로 나누면 이러한 오류를 완화하는 데 도움이 되지만 모든 시나리오에서 오류가 없는 것은 아닙니다.
나눗셈 및 곱셈에 대한 참고
중요합니다. x / 100과 x * 0.01은 반올림 오류의 불일치로 인해 서로 바꿔 사용할 수 없습니다. 나눗셈은 x 값에 따라 달라지며 0.01에는 고정된 반올림 오류가 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3