Re: 65.6 심사문제 질문드립니다.
, 도장_ 관리자님이 작성pow 함수를 쓰지 말고 직접 계산하세요.
x = p2.x - p1.x;
로 계산하고
x*x로 쓰세요.
입력 값
11 22 77 88
직접 계산한 결과
93.338095
문의한 코드
93.338097
pow 함수의 해상도가 낮아서 부동소수점 계산에서 오차(rounding error)가 발생합니다.
Differences in rounded result when calling pow()
https://stackoverflow.com/questions/17063102/differences-in-rounded-result-when-calling-powpow() 함수를 호출했을 때 올림 결과에 차이가 발생하는 이유에 대한 질문이죠. 상세한 내용은 링크를 참고하세요.
rounding error가 없이 정확하게 계산하고 싶다면 직접 계산해야 합니다.
%lf 대신 %f로 출력해도 됩니다. 대신 출력하는 자릿수가 짧을 뿐입니다.
%f로는 유효자릿수 6개까지 다룹니다. pow() 함수의 내부 계산에서 숫자 처리의 해상도가 낮아서 6개 유효자릿수 조건도 만족하지 못하고 오차가 발생하는 것입니다.
단정도(single precision), 배정도(double precision)이란?
https://whatisthenext.tistory.com/146부동소수점수는 2진수로 실수를 표현하기 위한 방식이고, 이에 대해서는 컴퓨터 구조론에서 깊이 학습하게 됩니다. 일반적인 코딩 학습 과정에서는 신경 쓸 주제가 아닙니다. 부동소수점을 표기하는 IEEE 754와 부동소수점수 비트 계산은 컴퓨터 구조론 수업 시간에 반드시 나오고, 반드시 중간고사에 나오고, 반드시 싫어하거나 어려워하는 과목이니 미리 즐길(?) 필요는 없습니다. 가능하면 모르고 사는 게 좋습니다. 게임 프로그래밍이 아니면 대부분의 코딩에서는 정수형을 가장 많이 사용합니다.
심사문제 해설에서도 pow 함수 사용을 설명하지 않습니다. 가능하면 가이드를 따라주세요.