작성
·
85
0
안녕하세요, C언어 배우고 있는 입문자입니다.
궁금한 점은 2가지 입니다.
첫번째 문장에서 소수점 12자리 까지 표현하고 싶은데 컴파일하면 뒤에 엉뚱한 숫자가 나옵니다.
두번째 문장에서는 왜 저런 답이 나왔는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
ckw041333님의 질문에 대해 답변드립니다.
C언어에서 double
타입은 대략 15~16자리의 십진수 정밀도를 가집니다. 그래서 123456789.0123456789
와 같이 많은 숫자를 정확하게 저장하고 표현하려고 하면, 정밀도 한계로 인해 뒤의 숫자가 예상과 다르게 나타날 수 있습니다. printf("double (wltn) : %.12f\n", wltn);
에서 .12f
는 소수점 아래 12자리까지 표현하라는 의미이나, double
의 정밀도 한계로 인해 정확한 숫자를 표현할 수 없게 되어 엉뚱한 숫자가 나타나는 것입니다.
두 번째 문장에서 printf("double (wltn) : %e\n", wltn);
는 double
타입의 변수를 과학적 표기법으로 출력하는 형식입니다. %e
는 지수 형식으로 숫자를 출력하도록 지시하여, 123456789.012345676154
가 1.234568e+08
로 출력된 것입니다. 여기서 1.234568e+08
은 (1.234568 \times 10^8)을 의미합니다. 과학적 표기법은 매우 크거나 작은 숫자를 표현할 때 유용하며, 이 경우 double
변수의 값을 간결하게 표현할 수 있습니다. 출력된 숫자는 double
의 정밀도에 기반한 가장 정확한 표현을 나타냅니다.
C언어 학습 초반에는 정밀도와 데이터 타입의 한계를 이해하는 것이 중요합니다. 계속해서 학습하시면서 이러한 개념들이 더 명확해질 것입니다. 학습에 도움이 되길 바랍니다.