봉황대 in CS

[Chapter 3. 컴퓨터 연산] IEEE 754 부동소수점 반올림과 근사 본문

Computer Science & Engineering/Computer Architecture

[Chapter 3. 컴퓨터 연산] IEEE 754 부동소수점 반올림과 근사

등 긁는 봉황대 2022. 8. 28. 20:56

* 본 글은 '컴퓨터 구조 및 설계: 하드웨어/소프트웨어 인터페이스(Computer Organization and Design: The Hardware/Software Interface) 5th edition'의 내용과 2021학년도 1학기에 수강한 '컴퓨터 구조' 과목 강의 내용을 함께 정리하여 작성하였습니다.

 

 

IEEE 754에는 4가지 자리맞춤 모드(rounding modes)가 있다.

 

1. Always round up (항상 자리올림) (+∞ 방향)

2. Always round down (항상 자리내림) (-∞ 방향)

3. Truncate (잘라내기)

4. Round to nearest even (가장 가까운 짝수로의 자리맞춤) (반올림)

 

 

이러한 자리맞춤 모드들이 존재하는 이유는 아래와 그림과 같이 F field의 비트 수가 제한되어 있기 때문이다.

 

 

소수자리 숫자의 개수가 F field 비트 수보다 더 클 경우 이를 표현할 방법이 필요했던 것이며,

부동소수점 형식으로 나타낼 수 있는 가장 가까운 수를 찾아내는 것이 자리맞춤의 목적이다.

 

현재의 부동소수점 표현 방식에서는 Round to nearest even을 가장 널리 사용한다.

 

Always round up

항상 자리올림이 된다.

 

1.0011111001을 소수 셋째자리까지 나타내야 한다고 하면

Always round up의 결과는 1.010이 된다.

 

Always round down

항상 자리내림이 된다.

 

1.0011111001을 소수 셋째자리까지 나타내야 한다고 하면

Always round down의 결과는 1.001이 된다.

 

Truncate

뒤에 수가 어떻든 원하는 소수자리 이후의 수는 모두 잘라버린다.

 

1.0011111001을 소수 셋째자리까지 나타내야 한다고 하면

Truncate의 결과는 1.001이 된다.

 

Round to nearest even

위의 자리맞춤 연산들은 확률적으로 공평하지 않다.

해당 방법들로는 모든 수가 한쪽 방향으로 치우쳐질 수 밖에 없기 때문이다.

 

공평한 방법은 절반을 자리올림하고, 나머지 절반은 자리내림하는 것이다. (반올림)

 

 

Round to nearest even은 반올림 방법이라고 생각하면 되며,

결과 값이 정확히 두 값의 가운데 위치할 때 어떻게 할 것인가를 결정한다.

 

계산된 결과 값이 두 값의 가운데에 위치할 때 최하위 비트가 홀수이면 더하기 1, 짝수이면 잘라내는 것이다.

즉, 정가운데일 때 이 방법은 항상 최하위 비트를 0으로 만들어 준다.

 


위의 설명만 갖고는 어떤 방식으로 돌아가는 것인지 잘 그려지지 않을 것이다.

 

 

정확하게 자리맞춤을 하기 위해서 하드웨어는 계산할 때 추가 비트를 포함한다.

 

IEEE 754는 계산하는 동안 오른편에 항상 두 개의 추가 비트를 유지하며,

각각 Guard bit(보호 비트)Round bit(자리맞춤 비트)라고 부른다. 이들은 정밀한 계산 결과를 위해 사용된다.

 

Round to nearest even에서는 가장 가까운 짝수로 자리맞춤을 해야하는데

이를 위해서는 세 번째 비트, Sticky bit(점착 비트)을 추가로 사용한다.

 

Round bit의 오른쪽에 0이 아닌 비트가 존재할 때 Sticky bit는 1이 된다.

 

 

 

각각의 비트에 대한 자세한 설명은 아래의 예시를 보면서 알아보도록 하자.

 

 

 

1.0011011001 소수 셋째 자리까지 나타내야 한다.

이 수는 1.001보단 크고, 1.010보단 작은 수이므로 둘 중 하나로는 반올림되어야 한다.

 

소수 셋째 자리까지 자리올림을 해야하므로

소수 넷째 자리부터 하나씩 차례로 Guard bit, Round bit, Sticky bit으로 정해진다.

 

[ Ground bit ]

만약 G가 0이면 1.0010...이 되는데, 이는 자명하게 내림쪽(1.001)에 가까운 수이다.

따라서 G가 0일 경우에는 R와 S이 무엇이든 관계없이 내림을 해준다.

 

즉, 위의 예에서 G가 0이라면 Round to nearest even의 결괏값은 1.001이 되는 것이다.

 

 

만약 G가 1이라면 R와 S까지 전부 확인해주어야 한다.

 

 

[ Round bit ]

G가 1일 때 확인되는 비트이다.

 

만약 R가 1이라면 1.00111... 이다.

이는 1.001보단 1.010 쪽에 조금 더 가까운 수이기 때문에 올림이 된다.

 

 

 

즉, G가 1이고 R이 1이라면 올림이 되고, R이 0이라면 S까지 확인하여야만 한다.

 

 

[ Sticky bit ]

G가 1이고 R이 0일 때 확인되는 비트이다.

 

이 비트는 특이하게, 해당 비트만 확인하는 것이 아니라 뒤쪽에 나오는 모든 비트도 확인하여야 한다.

만약 해당 비트 포함 뒤쪽 비트 중 1이 한번이라도 나오면 S는 1이 된다.

 

반대로 한번도 나오지 않는다면 S는 0이 된다.

 

 

S가 1일때는 1.001101이다. 이는 자명하게 1.010 쪽에 조금 더 가까운 수이므로 올림이 된다.

 

 

그러나 S가 0이라면 1.001100이다.

이때는 GRS가 100이 되며, 짝수의 방향으로 내림 혹은 올림된다.

이때 부동소수점 표현에서의 '짝수'는 맨 마지막 비트(LSB)가 0이 되는 방향을 의미한다.

 

즉, S가 0이라서 1.001100이면 1.001로 내림되는 것이다.

 

반대로, 예시가 만약 1.010100인 수를 셋째자리까지 Round to nearest even하는 것이었을 경우,

결과는 1.010으로 올림된다.

 

 

 

single precison의 경우에는 소수 23번째 자리까지만 나타낼 수 있으므로

해당 23번째 자리 이후까지 긴 소수에서 이러한 반올림이 필요하다.

 

 

반응형
Comments