해결된 질문
작성
·
256
1
안녕하세요! 형변환 공부 중 예상치 못한 결과가 나와서 질문드립니다.
11행의 float 자료형을 갖는 변수 f에 double 표현식의 값이 들어갔습니다.
그래서 '분명 표현식의 값이 커지면 절삭되겠군?' 이라는 생각을 갖고, 변수 d와 비교하며 그 값을 크게 설정했습니다.
그런데 그 크기를 늘리니 둘 다 똑같은 값이 절삭되어 나오는 것 같습니다.
왜 이런 현상이 일어났는지 설명해주시면 감사하겠습니다.
답변 1
2
안녕하세요, 답변 도우미 Soobak 입니다.
우선, float
자료형과 double
자료형은 둘 다 실수를 표현하기 위해 사용되지만,float
자료형은 일반적으로 4
바이트의 메모리를 사용하고, double
자료형은 일반적으로 8
바이트의 메모리를 사용합니다.
따라서, float
자료형은 일반적으로 대략 7
자리의 정밀도를 가지며, double
자료형은 일반적으로 대략 15
~ 16
자리의 정밀도를 가집니다.
따라서, printf()
함수에서 소수점 아래 8
자리까지 출력하도록 설정하신 후 결과를 확인해보시면 두 값이 다른 것을 확인하실 수 있으실 겁니다.
동일한 값의 소수점 아래 8
자리 까지의 출력 결과
또한, C
언어의 형변환 규칙에 따라서 f + 1.23411111
에서 float
인 f
와 double
인 1.23411111
의 연산이 일어나면, 컴파일러는 더 높은 정밀도를 가진 형태로 현변환을 진행하게 됩니다.
따라서, f + 1.23411111
의 결과는 실제로 double
형태로 계산이 된 후, 그 결과가 다시 float
인 f
에 저장될 때, float
의 정밀도에 맞게 절삭되어 저장됩니다.
안녕하세요, 답변 도우미 Soobak 입니다.
printf()
소수점 아래 8
자리까지 출력하기 위해서는 변환 지정자의 수식어 .
를 사용해야 합니다.
관련 내용은 강의 4.8 변환 지정자의 수식어들 을 참고하시면 도움이 되실 것 같습니다.
우선은, 간단한 예제 코드를 첨부드리오니, 한 번 컴파일 후 실행해보시길 바랍니다.
만약, 계속 막히시거나 궁금하신 점이 있으시면 편하게 댓글 남겨주세요.
#include <stdio.h>
int main()
{
double d = 0;
float f = 3.0f;
d = f + 1.23411111;
f = f + 1.23411111;
printf("%.8f\n", d);
printf("%.8f\n", f);
return 0;
}
선생님의 설명은 잘 이해가 됐습니다!
그런데 다시 코드를 입력해도