Coding Log



컴퓨터의 실수 표현

컴퓨터의 실수 표현 방법과 덧셈, 뺄셈에 대하여 알아보자.

실수 표현

실수는 정수부와 소수부로 나누어 표현된다.

2진수 밖에 모르는 컴퓨터이니만큼 정수처럼 실수 또한 2진수로 표현한다.

참고 위키피디아의 실수 문서

정수부 + 소수부 : 12.34
가수 + 밑수 + 지수 : 0.5 * 10^{-1}

컴퓨터에서 실수를 표현할 때는 위와 같은 지수 형식을 이용해 4byte나 8byte로 표현한다.

정확히 공식으로 나타내면 아래와 같다.

m * r^e
m은 가수, r은 밑수, e는 지수를 나타낸다.

IEEE 754 표준에 따르면 실수를 표현하는 지수는 아래와 같이 두 가지 형식으로로 정의된다.

  • 8bit 지수의 4byte 형식인 단일 정밀도 형식

  • 11bit 지수의 8byte 형식인 이중 정밀도 형식

위의 형식 전부 밑수는 2로 정해져 있어 따로 표기하진 않는다.

참고 위키피디아의 IEEE 754 부동소수점 표준 문서

\pm 1.???_{(2)} * 2^{?}

컴퓨터의 실수는 아래와 같은 형식으로 변환하여 저장한다.

하나의 예를 살펴보자.

실수 -0.00101_{(2)} * 2^2 이 있다고 하자.

위의 실수를 아래와 같이 변환하여 형식을 맞춘다.

-0.00101_{(2)} * 2^2 = -1.01 * 2^{-1}

자릿수를 왼쪽으로 3자리 옮겼기때문에 지수를 3 감소시켜 동일한 실수를 맞춰준다.

위와 같은 동작을 정규화 라고 한다.

또한 지수는 8비트로 표현하며 바이어스되었다(biased)라고 하는데 이는 위의 예시처럼 음의 실수를 표현하기 위해서이다.

지수 + 바이어스 = 바이어스된 지수 의 관계로 정의할 수 있다.

위와 같이 표현하는 이유는 바이어스가 없다면 지수는 0부터 255까지의 값을 가지기 때문에 양의 실수만 표현할 수 있게 되기 때문이다.

바이어스값을 127로 가지고 있다면 바이어스된 지수를 0부터 255까지의 값을 가진다고 할 때 위의 공식에 의해서 지수는 -127부터 128까지 나타낼 수 있으므로 음의 실수도 표현할 수 있게 된다.

실수의 덧셈과 뺄셈

실수의 덧셈과 뺄셈은 다음과 같은 순서도에 따라 동작한다.


실제 사례를 통해 확인해보자.

두 실수 1.101 * 2^2과 1.11*2^4의 덧셈을 살펴보도록 하자.

위의 두 실수를 IEEE 754 표준으로 나타내면 아래와 같다.

1.101 * 2^2 = 0 \; 10000001 \; 10100000000000000000000
1.11 * 2^4 = 0 \; 10000011 \; 11000000000000000000000

1단계 : 피연산자가 0인지 조사한다
피연산자가 0이 아니므로 바로 다음으로 넘어 간다.

2단계 : 지수가 같도록 조절한다
1.101 * 2^2과 1.11*2^4 중 더 작은 지수를 가진 1.101 * 2^2을 지수가 4가 되도록 조절한다.

1.101 * 2^2 = 0.01101 * 2^4

3단계 : 가수의 덧셈/뺄셈을 한다

이제 지수가 같으므로 가수를 더한다.

0.01101 + 1.11 = 10.00101

4단계 : 결과를 정규화시킨다

가수를 더한 결과인 10.00101 * 2^4를 형식에 맞춰 변환 즉, 정규화를 한다.

10.00101 * 2^4 = 1.00101 * 2^5

5단계 : 가수의 자리를 조절한다

이 덧셈에서는 가수의 조절이 필요하지 않다.

만약 가수의 덧셈결과가 8bit를 초과한다고 하면 가수의 표현범위를 넘어서게 되어 9번째 자리에서 반올림을 하게 된다.

예를 들어

0.00001101011 + 1.01 = 1.01001101011

가수의 덧셈이 위와 같은 결과가 나온다면 뒤에 있는 세 자리 011가 표현 범위를 초과하게 된다.

이때 9번째 자리인 0을 반올림하여 1.01001101이 최종 결과가 된다.

참고 이진법의 반올림은 특정 비트가 1이 넘는 경우 자리 올림하면 된다.

위와 같이 가수의 일부분이 절단되는 오류를 round off error 라고 한다.

참고 위키피디아의 round off error 문서(영어)


DISQUS 로드 중…
댓글 로드 중…

트랙백을 확인할 수 있습니다

URL을 배껴둬서 트랙백을 보낼 수 있습니다