본문 바로가기

CS

부동소수점의 의미와 표현

부동소수점의 의미

 

왼쪽부터 sign(부호), exponent(지수), fraction(가수)를 의미한다

 

부동소수점(浮動小數點, floating point) 또는 떠돌이 소수점[1] 방식은 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로, 유효숫자를 나타내는 가수(假數)와 소수점의 위치를 풀이하는 지수(指數)로 나누어 표현한다.

 

-위키백과 발췌-

---------------------------------------------------------------------------------------------------------------------------------------------------------------

 

부동소수점은 실수를 표현하는 데에 사용되는 컴퓨터 과학 및 프로그래밍에서 일반적으로 사용되는 표현 방식 중 하나이다. 위의 사전적 의미의 뜻 대로 소수점이 부동(不動), 즉 움직이지 않는 것이 아니라 떠서 자유롭게 움직인다는 의미의 부동(浮動)으로 소수점을 고정시키지 않는다.

이 이유는 부동소수점이 아닌 고정소수점 방식을 살펴보면 알 수 있는데 941.201 이라는 숫자는 고정소수점 방식으로 정수 부분인 941과 소수 부분인 201로 나누어서 표기해야한다. 이렇게 고정소수점은 부호부, 정수부, 소수부로 나누어서 표기할 수 있지만 컴퓨터 자료형의 비트 표현의 크기 문제 때문에 한계가 존재하는데 정해진 비트 수로는 매우 큰 수나 매우 작은 수를 표현할 수 없고 이로 인해 고정소수점이 나타낼 수 있는 범위는 매우 한정적이다. 이를 해결하기 위해 부동소수점 방식을 사용하게 된다.

 

예시로 들었던 941.201이라는 수를 이진법으로 표현할 시 1110101101.0011(2) 이라는 수를 갖게 된다.

소수점 아래로 0011이 무한히 반복하는, 유한 비트로는 정확하게 표현할 수 없는 무한 소수가 될 수 있다.

1110101101.0011(2)  이라는 숫자를 그대로 두면 고정소수점이 되는데 정수부를 1로 맞춘 후 적절하게 소수점 위치를 조정하는 것을 정규화라고 한다.

정규화를 통해 1110101101.0011(2)를  1.1101011010011(2) x 2⁹ 으로 나타낼 수 있다.

 

 한 이렇게 정규화를 거친 후 부호에 해당 하는 부호부, 소수점을 옮긴만큼의 자릿 수를 뜻하는 지수부, 소수부의 유효 숫자들을 뜻하는 가수부들을 한정된 비트를 적절하게 분배해 할당하는 것을 부동소수점 표현이라고 한다.

 

이렇게 부호부,지수부,가수부로 표현된 부동소수점 방식은 장점들이 존재한다.

 (1) 큰 수와 작은 수를 모두 표현하여 큰 범위의 수를 표현할 수 있다는 점으로 그 사이의 값들을 표현할 수 있어서 다양한 수치 계산에 적합한 점

 (2) 소수점의 위치를 고정하지 않고 지수와 가수를 통해 수를 표현함으로써 높은 정밀도를 제공할 수 있다는 점

 (3) 이러한 범위와 정밀도를 필요로 하는 다양한 문제를 해결할 수 있는 유연성을 제공하는 점

등이 있다.

 

물론 단점 또한 존재하는데

 (1) 이진법을 사용하는 표현 방식들의 공통점인 10진법을 정확하게 표현하지 못함으로써 10진법의 수를 2진법으로 변환할 때  정확히 표현할 수 없는 소수가 존재하기 때문에 정확도 손실이 발생할 수 있다는 점 

 (2) 높은 정밀도와 정확성을 유지하기 위해 더 복잡한 연산을 필요로 하고, 비트 수를 조정하고 정규화 과정을 거치면서 연산에 추가적인 시간을 요구 하는 등의 이유로 고정소수점 방식에 비해 더 많은 연산 시간을 필요로 하는 점

 (3) float 이나 double의 경우 가수부의 크기가 일정하기 때문에 지수가 충분히 클 경우 소수점 이하를 표현할 수 없게 되는 점

등이 있다.

'CS' 카테고리의 다른 글

값에 의한 호출 & 주소에 의한 호출 & 참조에 의한 호출  (0) 2023.10.30
비트연산자  (0) 2023.10.27
오버플로우와 언더플로우  (0) 2023.10.26
이진법과 2의 보수  (0) 2023.10.25