IEEE754
IEEE754 란?
IEEE 754는 IEEE에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이다.
실수와 메모리
컴퓨터는 2진수를 기반으로 정보를 저장한다. 실수 또한 이진수를 기반으로 저장되어져야하며, 컴퓨터에서 실수를 표현하는 방식으로는
고정소수점과 부동소수점 방식이 있다.
고정소수점 -> 부동소수점 방식이 나온 이유이기도 함
고정소수점 방식이란 메모리를 정수부와 소수부로 나누고 고정하여 처리하는 방식이다.
다음과 같이 32bit 체계에서 고정소수점 방식은 1bit 부호비트, 15 bit 정수부, 16 bit 소수부로 나뉘어 진다.
이 방식은 직관적이라서 알아보기 편하다는 장점이 있지만, 1) 수의 표현범위가 작다 2) 메모리 낭비가 발생 할 수 있다는 치명적인 단점을 가지고 있다.
부동소수점이란?
한자로 떠다니며 정해진 위치가 없음을 의미한다. 이 용어는 소수점의 위치가 고정되어 있지 않고 데이터의 크기나 정밀도에 따라 자유롭게 이동할 수 있다는 것을 의미한다. 이러한 특성은 컴퓨터가 다양한 범위의 실수를 효율적으로 표현할 수 있게 해 준다.
부동소수점 형태
다음은 float(32bit)의 부동소수점 형태이다.
- 부호부(sign) 1 bit : 0(양수), 1(음수)
- 지수부(exponent) 8 bit : 소수점의 위치 표현
- 가수부(fraction) 23 bit : 유효숫자 표현
으로 나누어진다.
부동소수점 계산 방식(변환 방식)
30.625 라는 숫자를 부동소수점 형태로 변환해보자. single-precision 방식을 사용한다.
1) 30은 이진수로 11110, 0.625는 101이다. 따라서 30.625는 이진수로 11110.101이라고 할 수 있다.
2) 정규화를 진행하면 1.1110101 x 2^4 이다
* 정규화: 소수점 위의 유효숫자가 한자리만 남도록만드는 과정
3) single-precision(32 bit)에서는 가수부가 23bit 이므로 나머지 가수부부분을 0으로 채운다
-> 지수부: 4, 유효숫자: 1.11101000000000000000000
4) 지수부에 bias 값 127을 더하여 이진화하면 10000011 이다.
5) 30.625는 양수이므로 부호비트는 0이다
6) 정규화를 진행하면 유효숫자의 최상위 비트는 항상 1이다. 효율성을 위해 맨 앞 1을 생략하고 23 bit로 2^24 범위의 수를 표현하도록 유효숫자 비트 가장 뒤쪽에 0을 추가한다.
-> 유효숫자: 111101000000000000000000
최종적으로 30.625를 single-precision 방식으로 표현하면 다음과 같다
0 10000011 111010000000000000000000
정규화 이유
정규화를 적용하면 항상 가수의 첫 번째 수는 1이 된다. 가수는 소수점 이하 숫자들로만 23비트에 담게 된다. 23개 비트 중 고정되어있던 1개 비트를 추가로 사용함에 따라 2^22 개 만큼 더 가수로 표현할 수 있다.
bias 사용 이유?
single-precision 은 8bit의 지수부를 가지고 있고, 음/양수의 지수 표현이 가능해야 한다.
만약, 첫번째 비트를 부호 비트로 사용하게 된다면 지수가 0인 경우 +0(00000000) 과 -0(10000000)으로 두 가지로 표현된다. 이때 편향된 지수를 도입하여 +0과 -0 중복을 사용하는 단점을 해결 할 수 있다.
참고
https://gall.dcinside.com/board/view/?id=programming&no=1064818
https://devocean.sk.com/search/techBoardDetail.do?ID=165270
https://modulabs.co.kr/blog/fixed-points-and-floating-points-how-computers-understand-numbers/
https://unagi-zoso.tistory.com/8
https://f-lab.kr/insight/ieee-754-floating-point-standard