실수 자료형
C언어에서 사용하는 실수 자료형은 다음과 같다.
자료형 | 크기 | 범위 | 유효 자릿수 |
양수 최솟값 | 양수 최댓값 | 형식 지정자 (실수 표기법) |
형식 지정자 (지수 표기법) |
float | 4byte (32bit) | 1.175494e-38 ~ 3.402823e+38 |
7 | FLT_MIN | FLT_MAX | %f | %e |
double | 8byte (64bit) | 2.225074e-308 ~ 1.797693e+308 |
16 | DBL_MIN | DBL_MAX | %f | %e |
long double | 8byte (64bit) | 2.225074e-308 ~ 1.797693e+308 |
16 | LDBL_MIN | LDBL_MAX | %Lf | %Le |
* 최솟값 및 최댓값은 float.h 헤더 파일에 정의되어 있으므로 해당 심볼을 사용하고자 한다면 해당 헤더 파일을 include해야 한다.
* 정수 자료형과 비슷한 맥락으로 long double 자료형은 운영체제와 플랫폼마다 크기가 다르다. 여기를 확인하자.
유효 자릿수?
유효자릿수는 실수를 일정 자릿수만큼만 표현할 수 있다는 의미이다. 유효자릿수가 7인 float형을 예시로 들면 다음과 같다.
#include <stdio.h>
int main()
{
float f1 = 0.1f;
float f2 = 12.34f;
float f3 = 123.4567f;
float f4 = 12345.678f;
float f5 = 1234.56789012345f;
printf("float형 0.1 은\t\t\t%f\t로 출력\n", f1);
printf("float형 12.34 는\t\t%f\t로 출력\n", f2);
printf("float형 123.4567 은\t\t%f\t로 출력\n", f3);
printf("float형 12345.678 은\t\t%f\t로 출력\n", f4);
printf("float형 1234.56789012345 는\t%f\t로 출력\n", f5);
return 0;
}
/*********************** [결과] ***********************
float형 0.1 은 0.100000 로 출력
float형 12.34 는 12.340000 로 출력
float형 123.4567 은 123.456703 로 출력
float형 12345.678 은 12345.677734 로 출력
float형 1234.56789012345 는 1234.567871 로 출력
******************************************************/
printf 함수로 float형을 소수점 조정없이 %f만으로 출력을 하면 기본적으로 소수점 아래 6자리까지 출력한다.
f1는 정수 부분 1자리 + 소수 부분 1자리 = 2자리 < 유효 자릿수 7자리이므로, 출력되는 수가 선언한 수와 동일하게 정상 출력된다.
f2 또한 정수 부분 2자리 + 소수 부분 2자리 = 4자리 < 유효 자릿수 7자리이므로, 출력되는 수가 선언한 수와 동일하게 정상 출력된다.
하지만 f3은 애초에 선언한 수가 정수 부분 3자리 + 소수 부분 4자리 = 7자리 = 유효 자릿수 7자리이므로, 소수점 조정없이 %f만으로 출력을 하게 된다면 123.456700이 아닌 123.456703이라는 부정확한 값이 출력된다. f4와 f5도 마찬가지로 선언한 수와는 다른 부정확한 값이 출력되는 것을 확인할 수 있다.
여기서 주목해야 할 점은, 앞 7자리까지는 선언한 것과 일치하는 정확한 값이 출력된다는 것이다. 이것이 유효자릿수의 의미다. 따라서 소수점을 정밀하게 표현하고자 한다면 유효자릿수가 더 많은 double이나 long double 자료형으로 선언해줘야 한다.
실수형 변수 선언
정수 자료형과 달리 실수 자료형은 선언할 때 약간의 주의를 요한다. 일반적으로 변수를 선언할 때는 [자료형 변수명 = 값] 형태로 선언하는데, 값 뒤에 특정한 시그널을 적어줘야 한다.
float 형을 선언할 때는 [float 변수명 = 값f] 처럼 값 뒤에 f를 붙여준다.
// float 변수명 = 값f;
float num = 14.56f;
double형을 선언할 때는 일반적인 형태로 [double 변수명 = 값] 형태로 선언한다.
// double 변수명 = 값;
double num = 16.78;
long double형을 선언할 때는 [long double 변수명 = 값l] 처럼 값 뒤에 l을 붙여준다.
// long double 변수명 = 값l;
long double num = 32.853l;
Source
'Dev > C' 카테고리의 다른 글
[C언어] scanf 정리 (0) | 2020.06.25 |
---|---|
[C언어] 변수와 자료형, 그리고 상수 (0) | 2020.06.20 |
[C언어] 문자 자료형과 아스키 코드(ASCII) (1) | 2020.06.19 |
[C언어] 실수형 변수 출력 시 소수점 자릿수 조절 (반올림/올림/내림) (0) | 2020.06.17 |
[C언어] 정수 자료형 정리 (64bit Windows 기준) (0) | 2020.06.15 |