간단한 IT 지식

[오늘의 지식] 컴퓨터의 실수 표현

Sh_Blog 2024. 3. 4. 22:05

1. 실수 표현 방식

컴퓨터는 0과 1로 이루어졌다는 이야기를 많이 들어봤을 것이다.

실제로 컴퓨터는 0과 1로 이루어진 비트로 연산을 수행하고 저장할 수 있기 때문에

실수도 이진수로 표현해야만 한다. 

 

하지만 정수에 비해 실수를 이진수로 표현하려면 굉장히 복잡하기 때문에

이를 해결하기 위하여 고정 소수점과 부동 소수점 방식을 사용하고 있다.

 

2. 고정 소수점

<부호(1비트) + 정수부(15비트) + 소수부(16비트)>

 

구조를 보면 정수부와 소수부의 비트가 적기 때문에 연산속도가 굉장히

빠르고 메모리 사용량이 적다. 하지만 그만큼 표현할 수 있는 수의 범위가

굉장히 좁고 정밀하지 않다.

 

이를 해결하기 위해 정수부의 비트를 늘려버리면 큰 수는 표현할 수 있지만

소수부의 비트가 줄어들어 정밀한 표현이 불가능하고 소수부의 비트를

늘려버리면 정밀한 표현이 가능하지만 큰 수를 표현할 수없다.

 

따라서 고정 소수점은 정밀도가 필요하지 않고 빠른 계산이 필요한

임베디드 시스템이나 신호 처리와 같은 응용 분야에서 중요하다.

 

3. 부동 소수점

단정밀도(Single Precision)

<부호(1비트) + 지수부(8비트) + 가수부(23비트)>

단정밀도는 비트가 적은 대신 계산 속도가 빠르고 메모리를 적게 사용한다.

하지만 정밀도가 낮고 큰 숫자나 작은 숫자에 대해서 오차가 발생할 수 있다.

 

배정밀도(Double Precision)

<부호(1비트) + 지수부(11비트) + 가수부(52비트)>

배정밀도는 비트가 많은 대신 계산 속도가 느리고 메모리를 많이 사용한다.

하지만 정밀도가 높고 더 큰 숫자를 표현할 수 있다.

 

부동소수점은 ±(1.가수부) * 2^지수부-127의 수식을 사용하기 때문에

고정 소수점보다 매우 큰 실수를 표현할 수 있다.

 

부동 소수점은 고정 소수점보다 실수의 훨씬 넓은 범위를 표현할 수 있다는 

장점이 있지만 항상 오차가 존재한다는 단점이 존재한다.

 

오차가 존재하는 이유는 가수와 지수를 사용하여 수를 표현하는 식을 사용하면

유효 자릿수가 한정되어 있기 때문이다.

이는 매우 작은 수나 큰 수를 표현할 때 일정 이상의 자릿수를

저장할 수 없어 연산 결과에 오차가 발생한다.

 

다른 이유로는 부동 소수점의 정규화 과정에서 발생하는 반올림으로 인한 오차,

10진수로는 정확히 표현할 수 있는 소수가 이진수에서는 무한 소수가 되는 경우 등이 있다.