컴퓨터에서 실수를 표현하는 방식은 정수와는 다르다. 정수는 이진법과 2의 보수를 사용하는데 실수는 부동소수점(floating-point 방식)으로 수를 저장한다.

 

실수형

수학에서 배우는 것과는 조금 다르다. 컴퓨터의 자원으로 수학의 개념을 표현하려고 노력한 흔적이 있다.

 

정수의 경우는 지난 포스트에서 충분히 다뤘다. 32비트 int형으로 -20억에서 40억 정도의 숫자를 다룰 수 있다. 64비트로 long형으로 가면... 1800만 조? (그 다음의 단위를 모름) 의 숫자를 사용할 수 있는데 일반적인 앱은 아직 그 정도의 숫자를 잘 다루진 않는다. 일단 세기가 어렵다.

 

실수의 경우는

 

float은 32비트 부동소수점 방식이고 값의 범위는 1.2E-38~ 3.4E38 이다 (E는 지수 10)

 

double은 64비트 부동소수점 방식이고 값의 범위는 2.2E-308~1.8E308 (E는 지수 10)

 

따라서 큰 숫자를 저장할 수 있고 소수점을 어느정도의 정밀도를 가지고 나타낼 수 있다.

 

예제를 실행해본다.

 

#include <stdio.h>

int main(void){

	float fpi;
	fpi = 3.1415926535897932384626433832795;
	
	double pi;
	pi = 3.1415926535897932384626433832795;
	
	
	printf("%5.20f\n",fpi);
	printf("%5.20f\n",pi);
	
	return 0;
} 

부동소수점

float 형과 double형의 정밀도가 다르다. float 형은 소수점 이하 7자리까지 값이 저장된다.(마지막자리 반올림) 7자리 이후는 메모리에 남아있는 쓰레기 값이다. double형은 소수점 이하 14자리까지 값이 저장된다.

 

부동소수점이 어떻게 저장되는가는 좀더 복잡한 내용이 담겨있다. IEEE 754의 규격에 따라 저장된다. 관련 내용은 아래의 포스트이다. 자바지만 IEEE 754 에 대한 내용은 같다.

 

https://digiconfactory.tistory.com/26

 

자바 튜토리얼 (2-3) 자바의 변수 (실수형, 부동소수점 방식)

자바에서 실수를 표현하기 위해서는 부동소수점 방식의 자료형을 사용해야 한다. 관련 포스트를 보니 부동 소수점 방식이라는 번역이 많은 사람들에게 혼란을 주고 있는 듯 하다. 무리도 아니��

digiconfactory.tistory.com

float 와 double형으로 실수를 잘 사용할 수 있다면 프로그래밍을 할 준비가 된 것이다.

공유하기

facebook twitter kakaoTalk kakaostory naver band