floating point와 fixed point 간단하게

1. floating point와 fixed point의 차이

 

fixed point는 부호(+ , - )와 정수부와 소수부로 나누어서 실수를 저장하는 것

 

만약 32bit인 경우 예를 들면 정수는 8비트 소수부는 23비트만 저장하겠다고 고정을 하고 실수를 저장함

 

정수를 표현하고자하는 비트 수를 늘린다면 더 큰 숫자를 표현할 수 있지만

 

그만큼 소수부 비트가 줄어들어서 정밀한 숫자를 표현하기 어렵다

 

반면 소수부 비트를 늘린다면 정밀한 숫자를 표현할 수는 있어도 큰 숫자를 표현하기는 어렵다

 

 

이런 문제를 해결하기 위해 floating point 방식이 등장했다

 

모든 실수를 부호(+,-)와 가수부와 지수부로 나누어 저장함

 

fixed point와 floating point

 

 

소수점을 옮긴다는 생각은 의미가 없는게

 

floating point는 12345를 $1.2345*10^{4}$로 저장하지 $12.345*10^{3}$이나 $123.45*10^{2}$

 

이렇게 생각하는건 의미 없는듯

 

소수점 바로 앞에 한자리를 두고 나머지는 모두 뒤로 둬야한다 이 말임

 

그리고 뒤에 두는 수의 공간 크기를 지수부에 저장이 되는..

 

 

 

2. floating point와 fixed point의 장단점

 

fixed point가 수의 저장 공간이 고정되어있으니 정확도를 잃어버리면서 큰 수를 표현해야하지만

 

그리고 두 fixed point의 곱셈을 하면 크기가 커지면서 쉽게 저장 공간을 넘나들어야하니 정확도도 순식간에 떨어짐

 

 

floating point는 그거와 무관하게 정확도를 잃어버리지 않고 더 넓은 범위의 큰 수를 표현하기가 쉬움

 

 

floating point의 정확도는 사용할 수 있는 총 bit수가 결정함(32bit 표현이면 32bit가 결정한다고)

 

floating point가 마치 fixed point의 개선으로 더 좋아보이지만 그렇지도 않음

 

 

기본적으로 별도의 연산장치로 floating point 연산을 해주는 FPU를 사용해야 연산이 가능

 

FPU는 fixed point에 비해 연산이 느리고 무거워

 

심지어 floating point는 근삿값으로 표현되어 거의 항상 computing 오차가 생김.

 

심지어 단순 덧셈과 뺄셈에서도 오차가 생김

 

이거와 반대로 fixed point는 직관적으로 이해가 가능하면서 계산비용도 적고 계산도 빠르고 덧셈, 뺄셈에 오차가 안생김

 

 

3. 주의할점?

 

만약 fixed point나 floating point나 32bit를 사용한다면 전체 공간 크기가 $2^{32}$으로 동일하므로 서로 다른 표현 가능한 수의 총 개수는 동일하다

 

그러나 표현 범위가 차이가 있다는 거floating point가 넓은 범위로 정밀하게 표현이 가능하다고 봐야겠지

 

 

 

8bit까지는 floating point를 생각해볼만한데 그 밑부터는 의미가 없다

 

밑에는 깨알같이 공부했었던 32bit는 single precision, 16bit는 half precision, 64bit는 double precision,....

 

 

 

4. FPU(Floating Point Unit)

 

컴퓨팅 비용이 많이 들더라도 나름 강력한 장점이 있어서 floating point를 주로 사용하고

 

이것에 대한 계산을 위해 별도의 연산장치인 FPU를 사용

 

만약 FPU를 쓰지 않으면 CPU가 integer 연산과 floating point 연산을 둘 다 해야하는데

 

두 연산의 logic이 상당히 달라서 상당히 비효율적이다.

 

그래서 CPU에 FPU라는 별도의 연산장치를 또 사용하여 non-integer 연산을 더욱 빠르게 다룰 수 있게 되었다

 

 

 

CPU와 FPU 연산 관계도?

 

 

 

예전에는 독립적으로 사용되었다

 

참고로 CPU에는 ALU라는 integer processing을 위한 연산 processor가 들어가있음

 

옛날에는 위 그림과 같이 별도로 사용되었지만 요즘에는 하도 많이 floating point를 사용하니까 CPU안에 FPU를 넣어서 사용한다고함

 

요즘에는 CPU안에 FPU를 넣어서 사용한다고 한다

 

TAGS.

Comments