국민대학교에서 '컴퓨터 구조 및 설계 MIPS edition 제 6판' 교재를 이용한
임은진 교수님의 강의를 바탕으로 작성한 글입니다
Floating Point Numbers
부동 소수점 숫자란, 소수점이 어느 한 곳에 정해져있지 않고 둥둥 떠다닌다는 의미로서 실수를 표현하기 위해 사용된다.
정수로 표현할 수 없는 매우 큰 숫자나 작은 숫자의 표현이 가능해진다.
잠시 후에 배우겠지만 지수부의 값을 변경해서 소수점의 위치를 변경할 수 있다.
Scientific notation
너무 크거나 너무 작은 숫자들을 십진법으로 편하게 작성하여 표현하는 방법이다. (ex. 100000 = 10^5)
유효숫자 부분에서 소수점 앞 숫자가 0이 아닌 한 자리 수인 경우에 normalize 되었다고 한다.
유효숫자란 아래의 -2.34 X 10^56에서 -2.34를 의미한다.)
컴퓨터에서는 모든 숫자들이 2진수로 표현되기에, normailze된 유효숫자는 반드시 '1. '으로 시작되는 숫자이다.
Floating Point Standard
IEEE 754 표준은 두 가지 방법으로 표준을 정하고 있다.
- Single precision : 32비트
- Double precision : 64비트
IEEE Floating-Point Format
소수는 부호(Sign), 지수부(Exponent)와 소수부(Fraction)로 나눌 수 있다.
지수부(Exponent)는두 수를 비교할 때 지수부를 좀 더 쉽게 비교하기 위해 unsigend로 처리한다는 사실을 기억하자.
실제 exponent 값에 bias를 더한 값을 사용한다.
(Single precision: Bias = 127, Double precision : Bias = 1023)
소수부(Fraction)을 표현할 때는 Nomalization이 되어있다고 가정하기에 1이 생략되어 있다는 사실을 기억하자.
- 지수부, 소수부가 모두 0이면은 0이다.
- 지수부가 0이고 소수부가 1이면, 0과 1사이의 아주 작은 수를 표현하기 위함이다. (이유는 뒤에서 설명할 예정이다)
- 일반적인 경우
- 지수부가 255이고 소수부가 0이면은 무한대를 의미한다.(부호가 있다.)
- 지수부가 255이고 소수부가 0이 아니라면 NaN을 의미한다.
예시를 통해 알아보자.
Denormal Numbers
normalize 되지 않은 숫자를 의미하며, 소수점 앞에 있는 숫자가 1이 아닌 0의 경우를 말한다.
즉, Exponent가 0으로 이루어져 있는 경우이다.
nomalize된 숫자보다 더 작은 수의 표현이 가능해진다.
실수 표현에서 0을 표현하는 방법
Exponent와 Faraction 모두 0이 되는 경우

Floating-Point Addition
부동 소수의 덧셈을 할 때는 어떻게 할까?
우선, 소수점 자리를 맞춰야한다. 지수부를 일치시키기 위해 Exponent가 작은 값의 소수부(Fraction)를 조정합니다.
(위 예제에서 오른쪽 수의 지수부가 왼쪽 수의 지수부보다 작으므로 소수점을 이동해주는 것을 확인 할 수 있다.)
이후 소수부끼리 덧셈을 진행하고 normalization을 하면 된다.
normalize 과정에서 연산된 지수가 변하며, 이 과정에서 오버플로우와 언더플로우가 발생할 수 있다.
(오버플로우는 연산 후 지수 부분이 표현할 수 있는 범위를 초과할 때 발생하며, 언더플로우는 지수가 표현 가능한 최소 범위보다 작을 때 발생한다.)
FP Adder Hardware
하드웨어의 관점에서도 살펴보자.
한 사이클 내에 floating point 연산을 하기엔 어렵기에, 여러 사이클에 걸쳐 수행되며 pipelining이 되어있다는 사실을 확인할 수 있다.
Step 1.
- Small ALU는 두 숫자의 Exponent 값을 비교하고, 어느 숫자가 더 큰지 판단한다.
- Exponent가 작은 숫자의 Fraction(소수부)를 오른쪽으로 이동시켜 두 숫자의 자릿수를 맞춘다(Shift Right).
→ 이를 통해 두 숫자가 동일한 Exponent를 가지게 된다.
Step 2.
Big ALU를 통해 두 수의 Fraction을 계산한다.
Step 3.
계산 결과의 Fraction을 normalize 진행한다.
: Fraction의 가장 앞자리가 항상 1이 되도록, 숫자를 왼쪽 또는 오른쪽으로 이동시킨다(Shift Left or Right).
: 밀리는 만큼 지수도 증가하거나 감소한다.
Step 4.
계산된 결과가 너무 긴 경우, 소수점 이하를 반올림하여 숫자를 줄여준다
Example. 0.5 + -0.4375

FP Associativity
부동 소수점 연산에서는 연산 순서에 값이 달라질 수 있다.
마지막에 정규화를 진행하기 때문에
ex. (-1.5x1038 + 1.5x1038 )+ 1.0 != -1.5x1038 + (1.5x1038 + 1.0)
Floating-Point Multiplication
부동 소수의 곱셈을 할 때는 어떻게 할까?
부동 소수의 곱셈은 덧셈보다 쉽다.
Exponent를 맞출 필요 없이 Exponent(지수부)끼리 더해주고, 소수부(Fraction)끼리 곱해주면 된다.
하지만 유의할 부분이 있다.
두 수의 지수부를 더할 때는 먼저 각 지수에서 bias를 빼고, 두 지수의 합에 bias를 다시 더하여 계산해야 한다.
추가로, FP 연산의 덧셈과 곱셈는 비슷한 복잡성을 가진다.
즉, 부동소수점 곱셈을 수행하는 하드웨어는 덧셈을 수행하는 하드웨어와 비슷한 수준의 자원과 시간이 필요하다.
FP Instructions in MIPS
'CS > computer architecture' 카테고리의 다른 글
Lecture24. vm (2) | 2024.12.09 |
---|---|
Lecture23. cache (0) | 2024.12.09 |
Lecture21. ILP (0) | 2024.12.05 |
Lecture20. performance (0) | 2024.12.03 |
Lecture19. branch-hazard-exception (0) | 2024.12.03 |