저번에는 정수를 변수에 저장해보았다.
이번에는 소수점을 표현할 수 있는 실수를 변수에 저장해보자.
float num1 = 0.1f; // 단정밀도 부동소수점 변수를 선언하고 값을 할당
// float는 숫자 뒤에 f를 붙임
double num2 = 3867.215820; // 배정밀도 부동소수점 변수를 선언하고 값을 할당
// double은 숫자 뒤에 아무것도 붙이지 않음
long double num3 = 9.327513l; // 배정밀도 부동소수점 변수를 선언하고 값을 할당
// long double은 숫자 뒤에 l을 붙임
// float와 double은 %f로 출력, long double은 %Lf로 출력
printf("%f %f %Lf\n", num1, num2, num3); // 0.100000 3867.215820 9.327513
- 소수점 변수를 선언하고 값을 저장한다. float num1 = 0.1f;
- float는 숫자 뒤에 f를 붙인다.
- double 소수점 변수를 선언해주고 값을 저장한다. double num2
- long double num3는 앞과 같은 방식이지만, 숫자 마지막에 l을 붙인다.
우리는 소수점을사용해서 실수를 저장했다.
* %f: 부동소수점(floating point)의 약어로 f를 사용한다.
%lf: long floating point에서 point를 제외한 첫 글자를 따서 lf를 사용한다.
자료형 | 크기 | 범위 | 유효자릿수 | 비고 |
float | 4바이트, 32비트 |
1.175494e-38~3.402823e+38 | 7 | IEEE 754 단정밀도 부동소수점 |
double | 8바이트, 64비트 |
2.225074e-308~1.797693e+308 | 16 | IEEE 754 배정밀도 부동소수점 |
long double |
8바이트, 64비트 |
2.225074e-308~1.797693e+308 | 16 | IEEE 754 배정밀도 부동소수점 |
우리는 추가적으로 지수 표기법에 대해서 알고 넘어가야한다.
지수 표기법은 숫자를 사용할때 1231233333333333333333333333333333333333333333333과 같이 길어질때 지수 표기법을 통해서 짧은 숫자와기호를 통해서 컴퓨터에 입력할 수 있다.
지수 표기법으로 실수 값을 출력해보자
float num1 = 3.e5f; // 지수 표기법으로 300000을 표기
// float는 숫자 뒤에 f를 붙임
double num2 = -1.3827e-2; // 지수 표기법으로 -0.013827을 표기
// double은 숫자 뒤에 아무것도 붙이지 않음
long double num3 = 5.21e+9l; // 지수 표기법으로 5210000000을 표기
// long double은 숫자 뒤에 l을 붙임
// float와 double은 %f로 출력, long double은 %Lf로 출력
printf("%f %f %Lf\n", num1, num2, num3); // 300000.000000 -0.013827 5210000000.000000
// 지수 표기법으로 출력할 때는 float와 double은 %e로 출력, long double은 %Le로 출력
printf("%e %e %Le\n", num1, num2, num3); // 3.000000e+05 -1.382700e-02 5.210000e+09
- 지수 표기법이라고 해서 변수를 선언하는 방식이 다른것은 아니다.
- 똑같다.
- 지수 표기법(과학적 표기법)은 정수 부분은 한 자리수만 적고, 소수 자릿수 뒤에 e와 지수를 표기한다.
실수 자료형도 정수 자료형과 마찬가지로 오버플로우, 언더플로우가 발생할 수 있다.
오버플로우와 언더플로우를 보자
#include <stdio.h>
#include <float.h> // 실수 자료형의 양수 최솟값, 최댓값이 정의된 헤더 파일
int main()
{
float num1 = FLT_MIN; // float의 양수 최솟값
float num2 = FLT_MAX; // float의 양수 최댓값
// float의 양수 최솟값을 100000000.0으로 나누면 아주 작은 수가 되면서 언더플로우 발생
num1 = num1 / 100000000.0f;
// float의 양수 최댓값에 1000.0을 곱하면 저장할 수 있는 범위를 넘어서므로 오버플로우 발생
num2 = num2 * 1000.0f;
printf("%e %e\n", num1, num2); // 0.000000e+00 inf: 실수의 언더플로우는 0
// 오버플로우는 무한대가 됨
return 0;
}
- include <float.h> 는 실수 자료형의 최소값, 최대값이 정의된 헤더 파일로 코드에서 사용할 수 있게 해준다.
- FLT_MIN;과 MAX;는 각각 최소값과 최대값을 의미한다. 실수형 num1에 최소값을 저장해주고 num2에 최대값을 저장해주는 코드이다.
-참고-
서식 지정자 | 설명 |
%d | 부호 있는 정수 |
%ld | 부호 있는 long 정수 |
%lld | 부호 있는 long long 정수 |
%u | 부호 없는 정수 |
%lu | 부호 없는 long 정수 |
%llu | 부호 없는 long long 정수 |
%f | float, double형 실수 |
%Lf | long double형 실수 |
%e | float, double형 실수를 지수 표기법으로 출력 |
%Le | long double형 실수를 지수 표기법으로 출력 |
'프로그래밍 > C 기본문법' 카테고리의 다른 글
UNIT 10. 상수 사용하기(수정중) (2) | 2021.02.21 |
---|---|
UNIT 9. 문자 자료형 사용하기 (0) | 2021.02.20 |
UNIT 7. 정수 자료형 (0) | 2021.02.19 |
UNIT 5. 변수 (0) | 2021.02.18 |
UNIT 4. 세미콜론, 주석, 중괄호, 들여쓰기 (0) | 2021.02.18 |