본문 바로가기

개발에 도움이 되는/자료구조 & 알고리즘

Float(부동 소수점 자료형)의 숫자 표현법

- Float (부동 소수점 자료형) : 부동이라고 해서 움직이지 않는다라는 뜻이 아니다. 그 반대의 의미로 소수점이 떠다니며 움직인다라는 의미의 부동이다.

 

컴퓨터는 2진수로 소수를 어떻게 표현할까?

위의 그림처럼 2진수만으로 표현할 수 있었으면 좋겠지만 그렇지 않은 경우가 있다.

예를 들어 0.3 같은 경우에는 0.01001100110011..... 무한 반복이다. 그래서 어쩔 수 없이 컴퓨터는 이를 표현할 수 있는 가장 근사치의 값이 저장된다. 이 근사 값을 저장하는 방법은 두 가지가 있다.

 

1. 고정 소수점 : 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해 놓고 해당 비트만큼만 사용해서 숫자를 표현하는 방식이다. 예를 들어 실수 표현에 4byte(32bit)를 사용하고 그중 최상위에는 부호 비트 1bit 그 뒤로 순차적으로 정수 비트 16bit, 소수 비트 15bit를 사용한다고 가정하였을 때, 10.3을 이러한 약속된 시스템에서 표현하면 바로 (0)0000000000001010.010011001100110이다. 하지만 이러한 방식은 정수를 표현하는 bit를 늘리자니 큰 숫자는 표현 가능하지만 정밀한 숫자 표현은 힘들고 그 반대로 소수 비트를 늘리면 큰 숫자를 표현하기 힘들다.

 

이런 문제를 해결하기 위해 소수점을 고정하지 않는 부동 소수점을 사용하고 있다.

 

2. 부동 소수점 : 일반적으로 IEEE 754 표준을 따르고 있다.

 

- 표현식 

 1. 부호부 (Sign) : 1bit, 숫자의 부호를 나타내며 양수일 때 0, 음수일 때 1이 됨

 2. 지수부 (Exponent) : 8bit, 지수를 나타 냄

 3. 가수부 (Mantissa) : 23bit, 가수 또는 유효숫자를 나타 내며 왼쪽부터 차례대로 채움

 4. bias : 2^(k-1) - 1이며, 여기서 k는 지수부의 비트수(8bit)를 뜻함. 즉 4byte 표현으로 bias는 127

  - bias의 역할 및 사용 이유 : 지수가 양수 일지 음수 일지 알 수 없는 상황에서 bias 값을 더하지 않는다면 지수가 음수인 경우(예를 들어 0.000101을 정규화하면 1.01*2^(-4)가 되어 지수는 -4 )에는 표현이 불가능하다. 즉, bias를 더함으로써 0승은 01111111 (127) 1승은 10000000 (128) 반대로 -1승은 01111110 (126) 이런 식으로 표현해주기 위해서 더해주는 것이다.

 

- 부동 소수점 변환 순서

 1. 부호 확인 후 부호 비트를 채운다. (양수 = 0, 음수 = 1)

 2. 숫자의 절댓값을 2진수로 표현한다.

 3. 2진수의 소수점을 아래 그림처럼 맨 왼쪽으로 이동시켜서 소수점 왼쪽에 1만 남도록 한다.

 4. 2진수를 아래 그림과 같이 정규화시킨다.

 5. 이제 정규화시킨 값의 소수점 오른쪽 부분을 가수부 24bit 앞에서부터 채워준다.

 6. 이제 지수부를 채워준다. 현재 예시로는 지수가 8이므로 이 지수 8에 bias 127을 더해준다.

 7. 그 후 이진수로 변환시켜준다.

8. 아래와 같이 채워준다.

 

 

- 부동 소수점 변환 예시

 -0.5를 변환해본다면 2진수로 0.1이고 이를 정규화하면 1.0 * 2^(-1)이며, 부동 소수점 방식으로 표현하면

10111111000000000000000000000000이다.

반응형

'개발에 도움이 되는 > 자료구조 & 알고리즘' 카테고리의 다른 글

정렬(Sort) 알고리즘  (0) 2022.01.14
힙(Heap)  (0) 2022.01.02
이진 탐색 트리(Binary Search Tree, BST)  (0) 2022.01.02
이진 트리(Binary Tree)  (0) 2022.01.02
트리(Tree)  (0) 2022.01.01