본문 바로가기

C++

[C++] 고정수소점, 부동소수점

고정소수점

고정 소수점이란 10진수를 2진수로 바꾼 다음 해당 값을 그대로 수소점에 삽입하는 방법이다.

맨 앞 1자리는 부호 비트를 사용하고 나머지 비트들을 소수점을 기준으로 정수부와 소수부를 표현하는 데 사용하게 된다.
이때 소수점의 위치는 미리 정해둔다. 그리고 소수부는 점의 뒤부터 채우면 비어있는 곳은 0으로 채우게 된다.
이러한 고정소수점 방식은 구현하기 편리하지만 사용하는 비트 수 대비 표현 가능한 수의 범위 또는 정밀도가 낮기 때문에 실수를 다룰 필요가 있는 범용 시스템에서 거의 안 쓰이고, 높은 정밀도가 필요 없는 소규모 시스템에 사용하게 된다.
 

부동소수점

부동소수점의 경우에는 2진수로 변화한 값을 그대로 추가하는 게 아닌 정규화 과정을 거치고 삽입하게 된다.
변화하는 방법은 지수부에 1만 남을 때까지 이동시키고 그 수만큼 지수부에 넣어주면 된다.
지수부에 값을 넣어줄 때 bias라고 하는 지정된 숫자를 더해주게 되는데 이유는 음수를 표현하기 위해서이다.
IEEE 표준 32비트 기준으로 0~127 구간은 음수, 128~255 구간은 양수를 표현한다.

 

부동 소수점 방식의 오차

부동소수점이 고정 소수 점보다 표현할 수 있는 범위가 넓지만 정밀도의 문제는 여전히 존재한다.
10진수를 2진수로 표현할 수 없기 때문이다 무한소수, 순환소수의 경우 가수부의 표현할 수 있는 비트 수를 넘어가게 되면 손실되는 부분이 생기기 때문이다 또한 실수 또한 이진수로 표현하기 때문에 가수부가 1/2^n 꼴로 표현되는 경우만 오차 없이 정확하게 값이 계산된다.
float형 타입은 소수 6자리까지는 정확하게 표현
double형 타입은 소수 15자리까지 오차 없이 표현할 수 있다.

 

 

참고자료 : https://gsmesie692.tistory.com/94

'C++' 카테고리의 다른 글

C++ Dll생성 및 사용  (0) 2021.01.26
C++ Static Library ,DLL(Dynamic Linking Library)  (0) 2021.01.23
C++ 콜백함수  (0) 2020.12.27
C++ STL(Map)  (0) 2020.10.06
C++ STL(알고리즘)  (0) 2020.09.28