다음 입력 데이터에 대해서
반올림 하지 않은 값은 1.449459 로, 맨 마지막에 한 번만 반올림 했다면 1.449 가 정답이지만
매 단계마다 반올림 한 것은 1.450 이 나옵니다.
double 은 오차 없이 표현할 수 있는 숫자의 개수 (= 유효숫자)가 15 입니다. 계산 결과가 유효숫자 15개를 넘어선다면 스스로 반올림합니다.
매 계산 단계마다 반올림을 하는 것은, 유효숫자를 스스로 4로 줄이는 것이 됩니다.
추가로, 이 프로그램은 n = 1 일때 잘못된 동작을 할 수 있습니다.
akqjqcjs7 3년 전
안녕하세요.
문제는 해결했습니다. 하지만 double에 관해 의문점이 생겼습니다.
처음에 풀때는 33번 줄을 dp[i] = round(m(array[i] * dp[i - 1], array[i]) * 1000) / 1000; 이렇게 했습니다.
이렇게 했던 이유는 계속 곱하다보면 소수점자리가 너무 커져 에러가 뜰까봐 소수3째 자리까지 잘라주면서 저장을 하려고 했습니다.
하지만 이렇게 하니까 틀리더군요. 그래서 질문 검색을 통해 다른분이 마지막 출력에 .3lf만하고 round는 필요 없다는 글을 보고
round를 없애고 출력을 하니 정답이 떳습니다.
제 의문점은 dp[i]를 계산 할때마다 소수점이 한칸 내려가다가 알아서 한계점에 도달하면 더 내려가지 않는건가요? 아니면 다른 이유가 있는지
궁금합니다.