5.625를 메모리에 저장한다고 치자.
2진수로 변환하면
일단 5 부터 = 2로 슝슝 나누어서 나머지 역으로 보면 101이 나온다.
아니면 1 2 4 8 로 자리수가 나가니까
1 4 만 켜주면 되니까 101
0.625는 2를 곱해서 정수가 되는 넘만 적는다.
0.625*2 = 1.250
0.250*2 = 0.500
0.500*2 = 1
정수자리면 보면 101
그래서
101.101이 된다.
지수형태로 나타나면 .을 앞으로 땡기고
1.01101 * 2 * 2
가 된다. 뭐 2진수에 2자리 앞으로 땡겼으니까.
메모리 저장할 때는
부호부(sign bit) 1 bit
지수부(exponent bit) 8 bits
가수부(mantissa bits) 23bits
유효자리수(precision) 6~7
로 구성된다.
float 일 때, double일 때는 1, 11, 52, 15~16 이다.
위에서 지수부는 2*2 에서 2 이다. 앞에 2는 2진수를 뜻하고 뒤에 2가 가수부니까.
거기다가 127을 더한다. 이유는 음/양을 구분해야 하는데
8비트 전부 1을 써 넣으면 11111111 = 255 이기 때문에 중간값인 127을 넣는 것이다.
즉 127은 0을 뜻한다. 127+2 하니까 2가 되고 만약 127을 보다 낮은 값이면 음수란 거다.
지수부가 음수란 뜻이쥥... -> 점(.) 찍는 곳이 좌측이 아니라 우측으로 간다는 소리.
double형은 1023을 더한다.
가수부에 소수점 자리가 저장된다.
01101이 저장되겠지. 0.625 는 깔끔하지만 2를 계속 곱해도 안끝나는 녀석이 생기게 나름이다.
그래서 실수는 오차가 난다.(결론)
2011년 2월 24일 목요일
피드 구독하기:
댓글 (Atom)
UPBIT is a South Korean company, and people died of suicide cause of coin investment.
UPBIT is a South Korean company, and people died of suicide cause of coin. The company helps the people who control the market price manipu...
-
[펌] [UNIX/LINUX 명령어] apropos linux 2005/06/28 22:05 수정 삭제 http://blog.naver.com/wiggyz/80014482910 Mr.You의 블로그 | ?? http:...
-
SELinux 불린 값을 이용해서 SELinux.getBooleanValue("xxxx") SELinux.setBooleanValue("xxxx", yyyy); Policy 에도 if 문을 줄...
-
안드로이드 SDK manager를 쓰다보면 XOOM 때문에 업그레이드가 안된다. 먼 계정을 넣으라고 한다. 안깔면 된다. 깔고 싶으면 에러 메시지에 뜨는 사이트 들어가서 회원 가입하면 그만이다. 간단하다. 들어가서 이메일 주소 넣으면 자기...
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.