C언어 자료형 질문드립니다.
조회수 682회
include
int main(void) { double x; x = (1.0e17 + 5.0) - 1.0e17; printf("%lf \n", x); return 0; }
include
int main(void) { double x; x = (1.0e16 + 5.0) - 1.0e16; printf("%lf \n", x); return 0; }
include
int main(void) { double x; x = (1.0e15 + 5.0) - 1.0e15; printf("%lf \n", x); return 0; }
EXP 가 17일떈 0이 출력되고 EXP 가 16일땐 4가 출력되고 EXP 가 15일땐 5가 출력됩니다.
EXP15일땐 정상출력되는것같은데 왜 16이상부턴 값이 이상하게 나올까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
위키백과에 다음과 같이 나와있네요.
1.0e1이 10으로 2자리 숫자이듯이, 1.0e15의 경우, 16자리, 1.0e16은 17자리, 1.0e17은 18자리가 됩니다. 따라서 double 형이 처리할 수 있는 수의 범위를 넘은 것이구요. 이런 현상을 흔히 overflow라고 합니다. 이 overflow가 발생하면, 값이 아무렇게나 변하게 되요.(물론 mod의 규칙에 따라 변합니다.)
나머지는 overflow에 대해 더 찾아보시면, 도움이 될 것 같네요.
위 이미지에 해당하는 위키백과 링크입니다.
(https://ko.wikipedia.org/wiki/C_%EC%96%B8%EC%96%B4_%EC%8B%A4%EC%88%98%ED%98%95_%EB%B3%80%EC%88%98)
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력