wxogus25   7년 전

택시 기하학 문제에서 변수에 long double를 사용하면 오답이 나오고 double를 사용하면 정답이 나오네요

똑같은 코드에서 long만 뺐는데 왜 정답이 나올까요?

표현 할 수 있는 값의 범위는 long double가 더 넓으니까 long double가 틀리면 double도 틀릴 줄 알았는데 아니네요....

대체 무슨 이유 때문에 double은 맞고 long double는 틀리는지 궁금합니다!

오답코드 =

yukariko   7년 전

long double의 출력은 %lf가 아닌 %Lf 입니다.

참고로 double 형의 출력은 %lf도 되지만 사실 float와 같이 %f가 맞는표현입니다.

wxogus25   7년 전

정말 printf 의 형식을 바꾸니까 정답이되네요?

그럼 오답의 이유가 long double가 double로 형변환이 되면서 발생한 오차때문인가요?

yukariko   7년 전

형변환이라기보단,

long double을 double로 인식하여 계산했다가 옳은것 같습니다.

wxogus25   7년 전

친절하게 설명해주시고 계시는데 아직도 이해가 안되는 부분이 있네요;;

애초에 long double이 아닌 double 로도 정답이 나오는데

long double을 double로 인식해서 계산한다해도 정답이 나오는것이 정상 아닌가요?

long double을 double로 인식하면서 double가 나타낼 수 있는 부분만 가진채 계산했다고 해도

그 double의 계산값으로 답을 구할 수 있으니까요

yukariko   7년 전

형변환하고 혼동하신것 같습니다.

int형을 long long으로 인식하고 계산한다면

4바이트 변수를 8바이트로 취급하여 오버플로우가 발생합니다.

지금의 상황도 위와같습니다.

long double은 10바이트

double은 8바이트 자료형입니다.


yukariko   7년 전

참고로 long long을 int로 인식하게 되는경우는 8바이트를 4바이트로 인식하니 잘리게되는데

이 경우는 아키텍처의 endian방식에 따라 계산값이 옳게나올수도 있고 그르게 나올수도 있습니다.

하지만 long double과 double은

부동소수 표현이고 정수처럼 간단한 표현이 아니기때문에 유지가 되지 않습니다.

wxogus25   7년 전

감사합니다!!

다시는 이런 문제때문에 틀리지 않을 것 같네요

좋은 지식 배워갑니다!

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