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이상부턴 값이 이상하게 나올까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 다음에는 게시물을 작성하실 때, 상단 메뉴의 code sample 같은 기능을 이용해주세요!! 그러면 다른 사람이 질문자님 코드를 보기 더 편할 것 같네요 ㅎㅎ 알 수 없는 사용자 2019.4.6 18:49

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)

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)