suhee0206   4년 전

double형의 정밀도가 소수점 이하 15라고 알고 있습니다. 그렇다면 스페셜 져지를 하고 있으므로 예제와 출력되는 모양은 다르지만, 오차범위가 맞으므로 맞는 답 아닌가요? 제가 제대로 이해하지 못한 부분이 무엇인지 궁금합니다

evenharder   4년 전

기본적으로 출력시 유효숫자가 6자리이기 때문입니다. 그리고 6자리로는 1e-9의 오차를 다루기 충분하지 않습니다. "%.12lf" 등으로 출력하셔야 합니다.

suhee0206   4년 전

감사합니다.

추가질문이 있습니다.

%.12g로 출력해도 오차를 다루기에 충분한가요? 

또 %.9lf로 하면 오차를 충분히 다룰 수 없는 경우가 나올 수 있나요?

evenharder   4년 전

이 문제의 모든 입력에 대해 %.12g는 %.12f로 변환 -> trailing zero 제거로 진행되기 때문에 오차를 다루기에 충분합니다.

다만 %g는 단순히 '유효숫자 맞추어 출력해주기' 포맷이 아니라는 점을 알아두셨으면 합니다 (밑의 코드를 봐주세요). 자세한 건 C format specifier를 검색해보시기 바랍니다.

확실하진 않지만, %.9lf는 소수 1e-10의 자리에서 반올림을 하는 것이기 때문에 오차가 1e-9 이내로 들어올 것이라고 생각합니다.

다만 그냥 여유롭게 2~3자리 더 출력하는 경우가 많습니다. 안 될 건 없기 때문입니다.



suhee0206   4년 전

친절하고 자세한 설명 정말 감사합니다. 

댓글을 작성하려면 로그인해야 합니다.