LuvSea
IEEE754 표준에의한 부동소수점의 이진표현 본문
부동소수점 수에 대한 IEEE 표준에는 부동소수점의 이진(binary) 표현과 반올림,
정확성, 예외적 결과(0으로 나누기 등)에 대한 규약들이 명시되어 있다.
이 글에서 다루는 기법은 이진 표현에 근거한 것이며, 반올림이나 예외 처리와는 큰 관련이 없다.
IEEE의 표준 이진 표현을 사용하는 컴퓨터나 콘솔이라면 부동소수점 처리에 대한 IEEE 표준을 완전히 만족하지 않는다 해도 이 글의 기법들을 적용할 수 있다.
펜티엄 III Streaming SIMD Extensions(SSE)와 PS2 벡터 유닛은 둘다 IEEE 표준의 부분집합을 만족한다.
그 부분집합은 예외 처리를 완전히 지원하지는 않으나, 이진 표현만큼은 표준을 따르므로 이 글의 기법들을 문제없이 적용할 수 있다.
IEEE 표준은 부동소수점 수를 하나의 부호 비트, 하나의 바이어스된 지수(biased exponent, -指數), 하나의 정규화된 가수(mantissa, 假數) 또는 유효수(significand, 有效數)로 표현한다. 단정도(single precision, 單程度) 32 비트 부동소수점 수(C의 float)는 그림과 같은 방식으로 저장된다.
* s = 부호 * e = 바이어스된 지수
* m = 정규화된 가수
* 부동 소수점 수 = s * 1.m * 2(e-127)
그림 IEEE 32 비트 부동소수점 형식. 부호 1 비트, 지수 8 비트, 가수 23 비트로 되어 있다.
float형 "-3.2f"를 정규화 과정을 거쳐 바꿔보면 다음과 같이 정규화 된다.
-1 * 1.100110011001100110011001 * 21
그러므로 부호는 음수, 바이어스된 지수는 128 (∵127+1),
그런데 정규화된 가수는 24번째 자리가 1이므로 올림하여(만약 “0”인 경우 버림) 마지막인 23번 비트는 10011001100110011001101 이 된다. 이를 토대로 정규화식을 그림으로 표현하면 다음과 같이 나타내 진다.
이것을 토대로 0번지부터 8bit씩 잘라서 10진수로 표현하면 다음과 같다.
1 : 1100 100 => 205 3 : 1001 1001 => 204
2 : 1100 1100 => 76 4 : 1100 0000 => 192
<********** C Source 와 실행 화면 **********>
* 소스 보기는 More 클릭
* 실행화면
* 실행결과 가수(뒤에 나오는 수)가 먼저 메모리에 적재되고 뒤에
바이어스된 지수(먼저 나오는 수)가 순서대로 적재되어
Little Endian방식이라는 것을 알 수 있다.
'sTudy' 카테고리의 다른 글
Visual Studio 2008 명령프롬프트(cmd)에서의 cl(C Compiler)사용법 (0) | 2009.04.20 |
---|---|
Visual Studio 2008 ws2_32.lib(윈속) 설정 (0) | 2009.04.20 |
Linux gcc compile의 흐름 (0) | 2009.04.14 |
Intel PXA255 Pro3 Board를 이용한 SSH server & client program porting (1) | 2008.12.11 |
Intel PXA255-PRO3 Board를 이용한 Root File System Porting (2) | 2008.12.06 |