본문 바로가기
프로그래밍언어/C언어

실수형은 double형을 선호한다.

by J코딩 2021. 12. 24.
반응형

정수형에서는 빠른 연산 속도 때문에 주로 int형을 사용한다고 했습니다. 그렇다면 실수형에서는 어떤 자료형을 선호할까요? 실수형에서 기본적으로 선호하는 자료형은 double형입니다. 특히, 공학 계산 등과 같이 정밀한 소수점 계산이 필요하다면 float형보다는 double형을 사용하는 것이 오차를 줄일 수 있습니다. float형은 소수점 이하 6자리까지 정밀도를 표현할 수 있지만, double형은 소수점 이하 15자리까지 정밀도를 표현할 수 있기 때문에 double형을 많이 사용합니다. 다음 예제를 통해 정밀도를 확인해 보겠습니다.

3행에서 실수형 float형은 소수점 이하 6자리를 표현할 수 있는데 변수 numl에 소수점 이하 15자리 수를 입력하고 있습니다. 

 

4행에서 실수형 double형은 소수점 이하 15자리를 표현할 수 있는데 변수 num2에 소수점 이하 15자리 수를 입력하고 있습니다.


6행에서 변수 numl을 출력 서식 %f로 출력하고 있습니다. float형은 소수점 이하 6자리를 초과하는 데이터는 표현할 수 없기 때문에 반올림해서 소수점 6자리까지 출력하고 있습니다.

 

7행에서 변수 num2를 출력 서식 %if로 출력하고 있습니다. double형의 출력 서식은 %lf입니다. double형은 소수점 15자리까지 출력할 수 있다고 배웠는데 6자리까지만 출력하고 있습니다. 왜 이럴까요? 그 해답은 10행과 11행에 있습니다.


8행에서 특이한 점이 있습니다. .15라는 표현이 서식 문자 앞에 사용되고 있습니다.  .15라는 표현은 소수점 이하 15자리까지 표현해달라는 뜻입니다. float형은 소수점 6자리까지가 의미있는 데이터입니다. 소수점 이하 15자리까지 표현해 보니 0.123456791043282가 출력됩니다. 소수점 이하 6자리를 초과하는 자리부터는 데이터의 오차가 발생하고 있습니다.

 

9행에서 double형은 소수점 15자리까지가 의미 있는 데이터입니다.  .15 표현을 통해 소수점이하 15자리까지 표현해 보니 0.123456789012345가 출력됩니다. 소수점 이하 15자리까지 오차 없이 출력되고 있습니다. double형이 선호되는 이유를 충분히 이해했으리라 생각합니다.

앞의 예제를 컴파일하면 경고가 발생합니다. 해결 방법은 다음 예제를 통해 살펴보겠습니다.

예제 6-8을 컴파일하면 경고가 한 개 발생합니다. 왜 이럴까요? [E] 키를 눌러 확인해 보면
이처럼 컴파일 결과를 볼 수 있습니다. 앞에서 실수형 데이터는 double형을 선호한다고 했습
니다. 0.123456 실수 상수를 double형으로 선호하여 인식하고 있는데, 갑자기 4행에서 float
형 변수에 실수 상수 0.123456 를 저장하고 있습니다. double형 데이터가 float형으로 되면 큰
자료형이 작은 자료형으로 변환되므로 데이터 손실이 발생합니다. 컴파일러는 선호하는
double형을 선호하지 않는 float형으로 변환하는 과정을 거쳐야 하는데, 이때 데이터 손실이
발생할 수 있다는 것을 경고하는 내용입니다.
그래서 경고를 없애려면 4행에서 float형을 double형으로 수정하고 출력 서식을 If로 수정하면
됩니다. 다른 방법으로는 다음처럼 실수 상수 뒤에 소문자 f또는 대문자 F를 삽입하면 됩니다.

 

float numl=0.123456F;

 

상수 뒤에 자료형을 명시하는 알파벳을 접미어라고 하는데 코드 뒤에 접미어를 붙이면 경고를
제거할 수 있습니다. 이처럼 접미어를 통해 상수의 자료형을 지정하는 것이 가능합니다. 다음
표는 접미어의 다양한 형태를 나타내고 있으니 참고하기 바랍니다.

 

자료형 접미어
unsigned int U 또는 u 2010U
Long L 또는 l 2010L
unsigned long UL 또는 ul 2010UL
float F 또는 f 3.14F

 

반응형

댓글