pwr2011   3년 전

안녕하세요. 문제를 풀다가 궁금한 점이 생겨 질문 올립니다.

이 문제를 푸는 과정에서 pow함수를 사용하였습니다.

그런데 pow에서 반환되는 값(double type)을 그대로 사용하면 틀리고, long long으로 타입 변환해야 정답으로 되더라구요. 

혹시 왜 그런지 알 수 있을까요? 제 생각에 overflow문제는 아닌 것 같습니다. 그렇다면 long long으로 변경한다고 해서 해결 될 문제는 아니기 때문에요. double형의 구현 방식의 차이인 것 같긴한데... 그냥 pow함수 쓸 때는 long long으로 타입 무조건 변경할까요?

pwr2011   3년 전

답변 감사합니다.

그런데 링크에 있는 글은 cout이 소수점을 반올림하여 보여주기 때문에 실제로는 pow가 제대로 된 값을 가지고 있다 라는 의미인 것 같습니다.

저는 cout을 하지 않고 pow가 반환한 값을 계산하는데 사용하는 경우라 위 글과는 내용이 좀 다른 것 같습니다.

herdson   3년 전

아 그렇네요.

부동소수점 오차로 인해 계산 결과가 달라질 수 있습니다. 따라서 계산 전 정수자료형으로 바꿔주어야 오차로 인한 버그없이 문제를 해결 할 수 있습니다.

이 경우 말고도 중간 과정으로 나온 실수를 정수로 바꿔주는 테크닉은 가끔 써먹을 때가 생기니 익혀두시면 좋을 것 같습니다.

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