부동소수점
부동소수점(Floating point) 방식은 실수를 컴퓨터상에서 근사하여 표현할 때(원래 이진법으로는 십진법 소수를 정확하게 표현할 수 없다.) 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현한다.
컴퓨터에서는 고정소수점 방식보다 넓은 범위의 수를 나타낼 수 있지만 연산 속도고 비교적 느리기 때문에 별도의 전용 연산장치(FPU)를 두는 경우가 많다. 고정 소수점과 달리 정수 부분과 소수 부분의 자릿수가 일정하지 않으나 유효숫자의 자리수는 정해져 있다.
IEEE 754
IEEE 754 는 컴퓨터에서 부동소수점을 표현하는 데 가장 널리 쓰이는 표준이다.
IEEE 754의 부동 소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를 표시하는 데 사용되며, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.
부호 비트는 1비트이며 실수를 32비트(float)로 표현할 때는 exp가 8비트, frac이 23비트이며 64비트(double)로 표현할 때는 exp가 11비트, frac이 52비트가 된다.
- 부호 비트 (sign bit): 0이면 양수, 이면 음수
- 지수부 (exponent): 2의 e승일 때 e+bias. bias는 거듭제곱의 범위가 음수와 양수에 걸쳐 고르게 나타날 수 있도록 정해놓은 오프셋으로, 32비트 자료형에서는 (2^8-1)-1 = 127의 값을 가진다.
- 가수부 (fraction): 의 형태로 표기한 가수. 왼쪽부터 차례대로 채운다.
ex.
-118.625를 float형 부동소수점으로 표현해보자.
- 음수이므로, 부호비트는 1 이다.
- 절대값을 이진법으로 나타내면 1110110.101 이다.
- 정규화 과정 (2진수를 1.xxx * 2^n 꼴로 변환한다) : 소수점을 왼쪽으로 이동시켜, 왼쪽에는 1 만 남겨둔다. 1.110110101×2⁶
- 앞의 정수부분 1은 정규화과정을 거치면 모두 1 이므로 무시한다.
- 가수부는 소수점의 오른쪽 부분을 그대로 쓰고 부족한 뒤의 비트는 0으로 채운다. frac : 11011010100000000000000
- 지수는 6 이므로 32비트 형식의 Bias인 127을 더해 6+127 = 133이된다. 이진법으로 변환한 exp : 10000101
- 결과 : 1 1000 0101 1101 1010 1000 0000 0000 000
리틀엔디안으로 해당 값이 저장되어 있는것을 확인할 수 있다.
정규화되지 않는 값
- 부호비트, 지수부, 가수부가 모두 0이면 0.0인 것으로 처리된다.
- 지수부가 0이고 가수부가 0이 아니면 0.0에 매우 근접한 소수값이다.
- 지수부가의 비트가 모두 1이고(11111111), 가수부가 0이면 무한이다. 부호비트의 따라 양의 무한, 음의 무한으로 나뉜다.
- 지수부가의 비트가 모두 1이고(11111111), 가수부가 0이 아니면 NaN(Not a Number)이다. 부호비트에 따라 Quiet NaN(QNaN)과 Signalling NaN(SNaN)으로 나뉜다.
정밀도
32 비트 float 자료형에서는 23비트의 가수부를 사용하며, 23비트의 가수부로는 약 7개의 유효 십진수(Signiticant decimal digit)를 표현할 수 있다. 2^23 - 1 은 8,388,607 이다.
float 는 6~7 자리까지는 정밀하게 표현 가능하다.
double 의 가수부는 52비트이며 2^52 - 1 은 십진수로 4,503,599,627,370,495 이다. 따라서 15~16 자리까지는 정밀하게 표현 가능하다.
읽어볼만한 글 : https://www.stat.cmu.edu/~brian/711/week03/perils-of-floating-point.pdf
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
EABI (0) | 2022.11.30 |
---|---|
LwIP 메모리 옵션 설정 (0) | 2022.11.11 |
ADC (Analog-to-digital converter) (0) | 2022.10.12 |
LwIP TCP/IP 스택 살펴보기 (0) | 2022.09.24 |
Ethernet, MAC, MII, RMII, GMII, RGMII PHY (0) | 2022.09.24 |