- 십진수와 이진수 그리고 정수와 실수

 

우리는 실생활에서 십진수을 사용하지만 컴퓨터는 하드웨어적 특성상 이진수를 사용합니다.

 

정수의 경우에는 우리가 사용하는 십진수와 정확히 일치하는 이진수를 표현할 수 있기 때문에 문제가 되지 않습니다.

 

즉, C에서 int 형 변수는 우리가 사용하는 십진수를 오차 없이 저장 할 수 있습니다.

 

예를 들어 십진수 3은 이진수 101로 변환돼 저장되고 십진수 8은 이진수 1000으로 변환돼 저장됩니다.

 

반면 실수의 경우에는 우리가 사용하는 십진수 값들을 이진수로 정확히 표현하지 못하는 경우가 많습니다.

 

예를 들어 십진수 0.2는 이진수로 정확히 표현 할 수 없고 소수점 아래 5자리(컴퓨터에서는 자리를 bit라고 표현합니다.)를 사용해서 최대한 가깝게 이진수로 표현하면 0.00110으로 표현 할 수 있습니다.

 

즉, C에서 float, double과 값은 실수형 변수들은 십진수 실수값과 최대한 가까운 이진수 실수값으로 저장하게 됩니다.

 

아래 표는 십진수 정수 0~10을 이진수로 변환한 값과, 십진수 실수 0.1~0.9를 이진수 5bit를 사용해서 최대한 가깝게 변환한 값을 나타낸 표입니다.

 

십진수와 이진수의 관계

 

표에서도 확인 할 수 있듯이, 십진수 0.1~0.9는 이진수로 변환되면서 오차가 생기게 됩니다.

 

예를 들어 십진수 0.1은 이진수 0.00011로 변환되고 이 이진수는 십진수 값으로 0.09375이기 때문에 실제 0.1과 차이가 있습니다.

 

이처럼 컴퓨터가 처리하는 이진수 실수 값들은 필연적으로 오차를 수반하게 됩니다.

+ Recent posts