본문 바로가기
컴퓨터 일반/IEEE

IEEE 754 [IEEE 부동소수점]

by 호군 2010. 12. 4.
반응형

링크 : http://enc.daum.net/dic100/contents.do?query1=10XXX14125


IEEE 754는 컴퓨터에서 부동소수점를 표현하는 가장 널리 쓰이는 표준이다. ±0 등의 수와 무한, NaN 등의 기호를 표시하는 법과 이러한 수에 대한 연산을 정의하고 있다.

IEEE 754에는 32 비트 단정도(single-precision), 64 비트 배정도(double-precision), 43 비트 이상의 확장단정도(거의 쓰이지 않음), 79 비트 이상의 확장배정도(일반적으로 80비트로 구현됨)에 대한 형식을 정의하고 있다. 이중 32 비트 단정도는 반드시 구현해야 하며, 다른 형식은 선택사항이다. 많은 프로그래밍 언어에서 IEEE 표준을 따르도록 정의하고 있다. 예를 들어 C에서는 float는 단정도, double은 배정도와 대응된다.



구조

IEEE 754의 부동 소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를 표시하는 데 사용되며, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.



만약 32bit 부동 소수점 이라면.. 부호부(1bit), 지수부(8bit), 가수부(23bit)의 구조로 되어있을 것이다.


ㅇ 부호부(Sign bit)는 0이면 양수, 1이면 음수를 표현한다.
ㅇ 지수부(exponent)는 excess-127 code를 사용해서 표현된다.
      ex) 2^0이라면 지수부에는 127( 01111111(2) )이 표현 될 것이다.
            2^1이라면 지수부에는 128( 10000000(2) )이 표현 될 것이다.
ㅇ 가수부(mantissa)는 정규화를 하고, 가장 왼쪽에 있는 1.을 생략합니다.
      ex) 13.5(10) 실수를 2진수로 변환하면 1101.1(2) 가 됩니다.
            이 수를 정규화 하면 1.1011 × 2^3 이 됩니다.
            정규화를 하면 가앚 왼쪽은 항상 1이 되기 때문에 1.1011에서 1.을 생략하고 1011만 표현합니다. 

임의 실수의 값으로 예제를 통해서 알아보자. 진수변환을 알기 위한 것이 아니기 때문에 수는 간단한 것으로 한다.
ex) 13.5(10)을 부동소수점으로 표현했을 때 2진수의 값을 보여라.
      13.5(10) → 1101.1(2)             [진수 변환]
      1101.1(2) → 1.1011(2) × 2^3   [정규화]
      부호부는 양수이므로 0, 
      지수부는 3이므로 127+3. 즉, 130이고, 2진수로 표현하면 10000010(2) 이다. 
      가수부는 1.1011이므로 가장 왼쪽에 1.을 생략하면 1011로 표현된다.
      
      13.5(10)부동 소수점으로 표현했을 때 값은 0100 0001 0101 1000 0000 0000 0000(2)  로 표현이 된다.
         



 질의

지수부에 excess-127 을 사용한 이유는 알지 못하겠군요..
부동소수점 최상위 비트에 부호비트가 있어서 지수부에는 부호비트가 있으면, 보기에도 좋지않고, 혼동 될 가능성이 있어서 excess-127을 사용하나 생각이 드네요.
뭐 그렇게 사용한다니.. '그렇구나' 할 뿐 이네요.
아시는 분은 댓글로 알려주세요

 

 답변

질의에 대한 답변은 '오산돌구'님의 답글을 참고하여 적습니다.
어떤 수가 있으면 지수부가 0일 경우 이 숫자를 0으로 표현하기 위해 예약되어있고,
지수부가 255는 무한대를 표현하기 위해 예약되어 있습니다.
즉, 예약되지 않는 지수부의 범위는 1~254입니다.
지수부가 음수를 표현해야 하므로 예약되지 않은 지수부는 -126 ~ 127 까지의 범위를 사용 합니다.
이 수에 '바이어스'라는 상수(127)를 더해서 예약되지 않는 지수부의 범위인 1~254의 범위를 표현 합니다.
하지만 아직도 글을 읽어보지만 이부분은 이해가 가지 않는군요.

"자릿수가 증가하는 방향과(실제 숫자가 큰 경우) 자릿수가 감소하는 방향(실제 숫자가 작은 경우)을
모두 고려해야 하기 때문에 부호가 필요해지지만, 위에서 정의한 최대/최소값과의 일관적인 표현을 위해
부호없는 정수형으로 표현하는 것이 좋으므로(?) 실제 값에 일정한 상수를 더해서 저장한다"

제가 드는 의문의 답은 이 부분인 것 같네요.
일단 인간과 다르게 컴퓨터는 음수라는 개념이 없으니.. 부호없는 정수형으로 표현하는게 낫겠다고 생각은 합니다.
만약 음수의 값을 확인하려면 부호비트가 '0'인지 '1'인지 보고, 음수이면 그 값들을 2의 보수를 취해야 할테니깐요.
그런 번거러움 없이 '바이어스 상수'인 127를 더하므로써 부호없는 정수를 사용 하는 것 같습니다.


 

반응형