3.12강 부동소수점 한계에서 왜 %e를 쓰나요?
327
작성한 질문수 7
3.12강 강의 후반부에서 underflow를 설명하실 때 min값을 출력하려고 할 때 max를 출력할때와 다르게(max를 출력할 땐 printf에서 %f를 쓰셨는데) %e로 지정을 하셨습니다.
제가 %f로 출력할 땐 콘솔창에 값이 제대로 표현되지 않았는데 %e로 했을땐 제대로 표현되는 것을 볼 수 있었습니다. 혹시 이유를 알 수 있을까요?
제가 생각한 이유는 min값은 너무 작은 값이라서 f형으로 표현하기엔 너무 작아서 지수식 표현법을 사용해야 정밀도를 잃지 않고 표현한 것이라 생각이 드는데 맞을까요?
//underflow
float min = 1.401298464e-45F;
printf("%e\n", min); // %f가 아니라 %e로 표현한다.
min = min / 100.0f;
printf("%e\n\n", min); //underflow가 발생해서 숫자가 날아간다.
답변 1
0
%f로 출력하면 말씀하신대로 %e (지수표현)에 비해
정밀성이 떨어지기 때문에 모두 0으로 출력됩니다.
사실 내부적으로는(코드 논리 상으로는) underflow가 발생하지만
출력으로 표현되지 않는 것입니다
가령 %e로 출력하면
#include <stdio.h>
#include <float.h>
int main()
{
float min = 1.401298464e-45F;
printf("%e\n", min); // %f가 아니라 %e로 표현한다.
min = min / 100.0f;
printf("%e\n\n", min); //underflow가 발생해서 숫자가 날아간다.
return 0;
}아래와 같이 underflow가 발생하는 것을 볼 수 있지만
$ ./a.out
1.401298e-45
0.000000e+00%f로 출력하면
#include <stdio.h>
#include <float.h>
int main()
{
float min = 1.401298464e-45F;
printf("%f\n", min); // %f가 아니라 %e로 표현한다.
min = min / 100.0f;
printf("%f\n\n", min); //underflow가 발생해서 숫자가 날아간다.
return 0;
}아래와 같이 모두 0으로 출력되는 것을 볼 수 있습니다.
$ ./a.out
0.000000
0.000000
Export template 안됨
1
45
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
71
3
main 함수에서 왜 int만 선언이 되는걸까요
1
63
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
58
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
63
2
Visual Studio Community 2026 사용 문의
1
149
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
96
3
강의자리ㅛ
1
85
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
119
2
소스파일안에 여러 파일
1
80
2
F5와 F7의 차이
1
82
2
c = TWO * (a+b); 에서 a와 b는?
1
63
2
; 세미콜론을 붙이는 기준에 문의
1
73
1
Step over 기능 문의
1
57
2
2.6 강의 따옴표 출력 규칙 문의
1
81
2
int main 함수 관련 오류 문의
1
71
2
13.4 words[0]
0
64
2
11.7 함수를 구현해 봤습니다.
1
66
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
67
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
57
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2





