LuvSea

IEEE754 표준에의한 부동소수점의 이진표현 본문

sTudy

IEEE754 표준에의한 부동소수점의 이진표현

사랑海 2009. 4. 17. 19:59
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

부동소수점 수에 대한 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방식이라는 것을 알 수 있다.

Comments