on
컴퓨터 사이언스 부트캠프 with 파이썬 - 3장 실수
컴퓨터 사이언스 부트캠프 with 파이썬
3장 실수
1. 부동소수점
부동소수점에서 부는 떠다닌다는 뜻으로 하나의 실수를 여러가지방법으로 표현할 수 있다.
ex) 123.456 > 1.23456 x 102 > 1234.56 x 10-1
2. 단정도와 배정도
부동소수점은 단정도 부동소수점과 배정도 부동소수점으로 나눌 수 있다.
단정도(single-precision)는 실수를 32비트(4바이트)로 표현하며 부호 1 비트, 지수부 8비트, 가수부 23비트로 구성
배정도(double-precision)는 실수를 64비트, 부호 1비트, 지수부 11비트, 가수부 52비트로 구성된다. 실수를 표현하는대에있어 두배많은 비트를 사용하므로 정밀도가 더 높다.
파이썬은 배정도 부동소수점을 사용한다.
3. 1바이트 실수 자료형 설계해보기
들어가기전에 용어정리
ex) 1.man x 2exp - bias
man(mantissa/fraction) : 가수
2 : 밑수
exp-bias(exponent): 지수
4.1 10진수 실수를 2진수 실수로 바꾸기
이제 7.75라는 10진수 실수를 1바이트 부동소수점으로 바꿔보자
7.75 = 4 + 2 + 1 + 0.5 + 0.25 = 111.11
4.2 정규화
정규화란 소수점 왼쪽에 위치한 가수부분을 밑수보다 작은 자연수가 되도록 만드는것이다. 10진수로 따지면 10의자리 이상의 숫자를 정규화를 통해 ‘한자리수 x 10n ‘ 로 만들면 된다.
111.11 = 1.1111 x 22
4.3 메모리 구조
1.1111 x 22 의 가수(man)은 1111 이고 지수(exp - bias)는 2이다. 이제 1바이트의 메모리 구조를 정하고 man과 exp값을 저장하면 된다. 맨 앞자리는 무조건 1이므로 생략한다.
1바이트의 메모리구조는 아래와같이 표현할 수 있다.
0 0000 000 (차례대로 부호부, 지수부, 가수부)
1.1111 x 22의 부호는 + 이므로 0
지수는 2이므로 4비트 바이어스 값 (2n-1 - 1 = 24-1 - 1 = 7)을 더한 9(0101)가 된다.
가수는 1111이지만 가수부에 할당된 비트는 3개뿐이므로 뒷자리 하나를 생략하게되어 111이 되게된다. (즉 정밀성이 떨어지게된다.)
따라서 7.75를 1바이트 메모리로 표현하면 01001111(16진수로 0x4f)
4.4 1바이트 부동소수점의 표현 범위
1.000 x 2-6 부터 1.1111 x 27 까지 표현할 수있다.
지수부가 0000일때와 1111일때는 그이상혹은 그이하와 같은 특별한 상황을 나타낼때 쓰이므로 제외한다.