인프런 커뮤니티 질문&답변

황진석님의 프로필 이미지
황진석

작성한 질문수

홍정모의 따라하며 배우는 C언어

3.12 부동소수점형의 한계

4:15에 나오는 float round-off문제에서 든 생각입니다

작성

·

346

·

수정됨

1

float a = 0.01f;
변수 a를 이렇게 초기화 하면 실제 a에는

0.01이 아니라 0.009999999776이 담깁니다.
printf("%f", a);를 했을 때 0.010000이 나오는 이유가
0.009999999776이 소수점 일곱번째자리에서 반올림 되어서 그렇게 출력되는게 맞는가요?

답변 1

1

안녕하세요, 답변 도우미 Soobak 입니다.

말씀해주신 내용이 맞습니다. 😀

printf() 함수에서 부동 소수점 값은 기본적으로 소수점 이하 6자리까지 출력되도록 정의되어있습니다.
이는 C언어 표준에 의한 것이라고 합니다.

따라서, printf("%.8f", a) 등과 같이 %f 서식 문자열 뒤에 추가적으로 . 과 숫자를 추가하여 출력할 소수점의 자리수를 설정하지 않는다면, 기본적으로 소수점 이하 6자리까지 출력이 되며, 소수점 이하 7자리에서 반올림이 수행됩니다.

또한, 이는 강의 3.11 부동소수점형13:10 부분에서 교수님께서 설명해주시듯이,
4바이트의 부동소수점은 10진수 기준으로 유효숫자(정밀도를 보장할 수 있는 숫자)가 6개라는 것과 연결지어 생각할 수 있을 것 같습니다.

질문해주셔서 감사드리고, 또 궁금한 점 있으시면 언제든지 편하게 댓글 남겨주세요! 😀화이팅!

황진석님의 프로필 이미지
황진석

작성한 질문수

질문하기