3053번 - 택시 기하학
택시 기하학 문제에서 변수에 long double를 사용하면 오답이 나오고 double를 사용하면 정답이 나오네요
똑같은 코드에서 long만 뺐는데 왜 정답이 나올까요?
표현 할 수 있는 값의 범위는 long double가 더 넓으니까 long double가 틀리면 double도 틀릴 줄 알았는데 아니네요....
대체 무슨 이유 때문에 double은 맞고 long double는 틀리는지 궁금합니다!
오답코드 =
long double의 출력은 %lf가 아닌 %Lf 입니다.
참고로 double 형의 출력은 %lf도 되지만 사실 float와 같이 %f가 맞는표현입니다.
정말 printf 의 형식을 바꾸니까 정답이되네요?
그럼 오답의 이유가 long double가 double로 형변환이 되면서 발생한 오차때문인가요?
형변환이라기보단,
long double을 double로 인식하여 계산했다가 옳은것 같습니다.
친절하게 설명해주시고 계시는데 아직도 이해가 안되는 부분이 있네요;;
애초에 long double이 아닌 double 로도 정답이 나오는데
long double을 double로 인식해서 계산한다해도 정답이 나오는것이 정상 아닌가요?
long double을 double로 인식하면서 double가 나타낼 수 있는 부분만 가진채 계산했다고 해도
그 double의 계산값으로 답을 구할 수 있으니까요
형변환하고 혼동하신것 같습니다.
int형을 long long으로 인식하고 계산한다면
4바이트 변수를 8바이트로 취급하여 오버플로우가 발생합니다.
지금의 상황도 위와같습니다.
long double은 10바이트
double은 8바이트 자료형입니다.
참고로 long long을 int로 인식하게 되는경우는 8바이트를 4바이트로 인식하니 잘리게되는데
이 경우는 아키텍처의 endian방식에 따라 계산값이 옳게나올수도 있고 그르게 나올수도 있습니다.
하지만 long double과 double은
부동소수 표현이고 정수처럼 간단한 표현이 아니기때문에 유지가 되지 않습니다.
감사합니다!!
다시는 이런 문제때문에 틀리지 않을 것 같네요
좋은 지식 배워갑니다!
댓글을 작성하려면 로그인해야 합니다.
wxogus25 7년 전 2
택시 기하학 문제에서 변수에 long double를 사용하면 오답이 나오고 double를 사용하면 정답이 나오네요
똑같은 코드에서 long만 뺐는데 왜 정답이 나올까요?
표현 할 수 있는 값의 범위는 long double가 더 넓으니까 long double가 틀리면 double도 틀릴 줄 알았는데 아니네요....
대체 무슨 이유 때문에 double은 맞고 long double는 틀리는지 궁금합니다!
오답코드 =