728x90

저번에는 정수를 변수에 저장해보았다.

 

이번에는 소수점을 표현할 수 있는 실수를 변수에 저장해보자.

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형 실수를 지수 표기법으로 출력
728x90

+ Recent posts