Search
Duplicate
💻

실수 표현 (고정소수점 & 부동소수점)

생성일
2023/02/22 06:57
태그
CA

실수 표현 (고정소수점 & 부동소수점)

컴퓨터는 기계어를 사용하여 모든 정보를 0과 1의 2진수로 처리한다.
컴퓨터는 실수를 표현하기 위해 고정소수점부동소수점 방식을 사용한다.

이진기수법

고정소수점과 부동소수점 표현 방식 모두 이진법에 기반하기 때문에,
고정소수점과 부동소수점 사용 이전 실수의 각 부분을 이진수의 형태로 변환 해야한다.
-123.125를 이진법으로 표현하면 -1111011.001(2) 이다.

고정소수점

고정소수점(Fixed point)은 표현 방식은 부호 비트 , 정수부, 소수부 로 구성되어 있다.
부호 비트(Sign Bit)는 맨 앞 1 bit0 은 양수를, 1 은 음수를 의미한다.
그리고 나머지 영역에 정수부와 소수부를 채우게 되는데, 소수점의 위치를 중앙으로 정해둔다.
32 bit 체계를 생각했을 때, 소수점의 위치를 기준으로 앞의 15 bit 에는 정수부를, 뒤의 16 bit 에는 소수부를 채운다.
→ -123.125의 예시를 보면, 부호비트는 음수이므로 -1, 앞서 이진수로 변환한 값 -1111011.001(2)의 정수부와 소수부가 고정된 소수점을 기준으로 들어가 있는 형태이다.
고정소수점 방식은 표현하는 과정은 편리하지만, 정수부와 소수부의 자릿수 제한으로 표현 가능한 수의 범위 및 정밀도가 떨어지기 때문에 잘 사용되지 않는다.

부동소수점

부동소수점(Floating point)에서 부동은 浮動(뜰 부, 움직일 동)이며, 소수점이 유동적이라는 의미이다.
IEEE 754는 전기전자기술자협회(IEEE)에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이다. 표준에 따르면 실수를 저장하는 데는 32bit 또는 64bit를 사용한다. IEEE 754의 부동소수점 표현 방식은 부호 비트, 지수 부분(exponent) , 가수 부분(fraction/mantissa) 으로 구성되어 있다.
부포 비트(Sign Bit)는 맨 앞 1 bit0 은 양수를, 1 은 음수를 의미한다. 부동소수점은 실수를 정규화 하여 지수부와 가수부로 표현한다.

정규화 (Normalization)

부동소수점에서 정규화는 실수를 다음과 같이 정수부가 1이 되도록 소수점을 옮기고, 2^x를 곱하여 소수점의 위치를 표현하는 것이다.
num=1.x2xex123.125=1.231252nnum = 1.x * 2^xex - 123.125 = -1.23125 * 2^n
이렇게 정규화한 값을 지수부와 가수부에 넣게된다. 가수부에는 정규화한 값의 소수점 아래 값들을 입력한다. 정규화를 한 결과의 정수부는 무조건 1이기 때문에 제외하며, 이를 hidden bit 라고 한다.
지수부에는 2^n 에서 n 의 값을 넣게 되는데, 지수부에 n 의 값을 바로 넣는 것이 아니라 bias (편향)을 더한 값을 넣게 된다. 32 bit 기준 지수부는 8 bit 를 이용하기에 음수를 포함한 -127 ~ -128의 값을 표현해야했다. 최종적으로 지수 비트를 별도로 사용하지 않고, n 의 값에 127을 더하여, 0~127, 128~255 구간으로 표현하였다.
→ 64 bit 체계에서는 지수부가 11 bit , 가수부가 52 bit 이며, bias 는 1023이 된다.
123.125의 예시를 보면 부호비트는 음수이므로 -1, 앞서 이진수로 변환한 값 -1111011.001(2)을 정규화 하면 -1.111011001 * 2^6 이 된다. 그래서 가수부에는 111011001이 지수부에는 6+127인 133의 이진법 표기 10000101이 들어간다.
부동소수점 표현 방식은 고정소수점에 비해 복잡하지만, 표현 가능한 수의 범위와 정밀도가 크다는 장점이 있다. 현재 대부분의 컴퓨터는 부동소수점 표현 방식을 사용한다.
다만 표현하고자 하는 수가 1/2^n 의 합으로 나타내지지 않으면, 이진법에서 무한소수가 되고, 비트는 한정되어 있기 떄문에 오차가 발생한다.

ref)