Ex15-float형 오차 발생

CODEDRAGON Development/C, C++

반응형

 

 

 

float형 오차 발생 실수형은 기본적으로 double형을 선호

C언어 컴파일러는 기본적으로 실수를 소수점 6자리 출력해 줍니다.

 

 

 

 

소스코드

#include <stdio.h>
int main(void) {
float num1=0.123456789012345;
double num2=0.123456789012345;
printf("float : %f \n", num1); //0.123457 출력
//0.123456 789012345
printf("double : %lf \n", num2); //0.123457 출력
//6째자리까지 반올림해서 표현
//%.15f: float형을 15자리까지 표현
printf("float : %.15f \n", num1); //0.123456791043282 출력
//0.123456 789012345
//float형은 6째자리까지가 의미있는 데이터, 그래서 6자리를 넘어서는 자리부터는 데이터의 오차가 발생
printf("double : %.15lf \n", num2); //0.123456789012345 출력
float num3=0.123456; // float num1=0.123456F;
//실수형은 기본적으로 double형을 선호하기 때문에 double형으로 연산을 수행하게 됩니다.
//double형을 float형으로 변환시 데이터 손실이 발생할 있으므로 명시적으로 숫자뒤에 F 붙여주어야 합니다.
//(큰자료형에서 작은자료형으로 변환되므로)
//해결방법: 출력을 %lf하거나 자료형뒤에 F 붙여 명시적으로 float형임을 표시해줍니다.
printf("float : %f \n", num3); // 0.123456(소수점 6자리까지 출력)
printf("float : %.2f \n", num3); // 0.12(소수점 2자리까지 출력)
return 0;
}

 

   

 

   

출력결과