Floating Point Representation
포스트 난이도: HOO_Middle
# Floating Point
Floating point는 실수를 컴퓨터 상에서 다루기 위해서 표현하는 방법을 의미한다.
한국말로는 부동소수점 또는 떠돌이 소수점이라고 부르기도 하는데 실수 중에서는 완벽하게 하나의 수치로 표현이 되지 않는 경우가 존재하기 때문이다.
따라서 Floating point는 표현이 끝나지 않거나 애매한 수에 대해 근사하여 표현할 때 사용되는 방식이다.
Fixed point와의 차이점은 소수점 위치를 특정하지 않고 표현하는 방식이 Floating point representation에 해당한다.
시스템에서 Real number(실수)를 표기하기 위해서는 2가지 부분으로 나누어서 나타낸다.
Mantissa와 Exponent 부분으로 나눠서 소수점이 포함된 실수를 나타내는 데 이것을 바로 Floating point representation이라고 한다.
(Mantissa는 한국에서 가수라고 부르며, Exponent는 지수라고도 부른다.)
또한 Signed number처럼 맨 앞에 위치한 숫자는 부호를 나타내는데 사용된다.
기계어는 2진법으로 이루어져있다보니 Floating point도 이진법으로 표현하여 나타낸다.
Floating point는 single precision과 double prescision이 대표적으로 표현하고 사용하는 방식인데, 쉽게 말해서 single precision는 32 bits, double precision는 64 bits이다.
이번 포스트에서는 12bits 예제를 활용하여 심플하게 알아보도록 하겠다.
# Floating point representation
mantissa * 10^(exponent - bias)
# 12 bit floating point representation
(-1)^b11 * (0.b10*b9*b8*b7*b6*b5*b4) * (10^(b3*b2*b1*b0 - bias))
위의 12 bits로 이루어진 예제 공식을 사용하면 Floating point를 계산하는 데 도움이 된다.
Floating point를 계산하는데 있어서 알아두면 쉽게 계산이 가능한 공식이다.
위의 예제 공식을 활용해서 몇가지 예제 문제들을 살 펴도록 하자.
아래의 예제는 12bits에서 bias가 0111일 때, 부호 별 가장 작은 수와 가장 큰 수에 대한 결과이다.
이번 예제는 bias에 대한 값을 주어졌지만, bias는 exponent 기준에서 2^(exponent-1)-1에 해당한다.
#If bias = 0111 = 7
# bias = 2^(exponent-1)-1
# Largest positive number
(-1)^0 * (.1111111) * (10^(1111-0111)) = 2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1
# Smallest positive number
(-1)^0 * (.0000001) * (10^(0000-0111)) = 2^-7 * 2^-7 = 2^-14
# Largest negative number
(-1)^1 * (.1111111) * (10^(1111-0111)) = -1 * (2^7 + 2^6 + 2^5 + 2^4 + 2^3 + 2^2 + 2^1)
# Smallest negative number
(-1)^1 * (.0000001) * (10^(0000-0111)) = -1 * (2^-7 * 2^-7) = -1 * (2^-14)
'Computer Science' 카테고리의 다른 글
[Database] EER Diagram: Disjoint와 Overlap (0) | 2022.02.20 |
---|---|
[Machine Level Data ] Floating Point Number Examples (0) | 2022.02.09 |
[Machine Level Data Representation] Fixed Point Number Representation: Unsigned and Signed (0) | 2022.02.04 |
[Operating System] Monolithic kernel and Microkernel (0) | 2022.01.26 |
[Operating System] Shell이란? (0) | 2022.01.26 |
댓글