컴퓨터 구조 : 컴퓨터 산술과 논리 연산
Computer Architecture

컴퓨터 구조 : 컴퓨터 산술과 논리 연산

부동소수점 수의 표현

 10진수에서는 과학적 표기(scientific notation)를 사용하여 아주 큰 수나 아주 작은 수를 간결하게 표현할 수 있다.

274,000,000,000,000 = 2.74 x 10^14
0.00000000000274 = 2.74 x 10^-12

 이와 같이 소수점의 위치를 필요에 따라 이동시키는 표현 방법을 부동소수점 표현(floating-point representation)이라고 하며, 그와 같이 표현된 수를 부동소수점 수(floating-point number) 라고 부른다.

 

부동소수점 수의 일반적인 형태

S = 수의 부호
M = 가수(mantissa)
B = 기수(base)
E = 지수(exponent)

 

앞서 보았던 2.74 x 10^14 의 경우

가수 M = 2.74

지수 E = +14

기수 B = 10

 

 디지털 컴퓨터에서는 2진수 체계가 사용되므로 위의 방식으로 표현하는 수는 2진 부동소수점 수(binary floating-point number)가 된다. 이 경우에도 구성 요소는 10진수의 경우와 동일하며, 기수 B = 2 인 것만 다르다.

 2진 부동소수점 수는 사용되는 비트 수에 따라 32bit 형식 혹은 64bit 형식으로 표현된다.

▲ 32bit 부동소수점 형식의 예

 

 이러한 형식에서 가수(M)은 정밀도(precision)를 결정해주고, 지수(E)는 표현 가능한 수의 범위(range)를 결정한다.

즉, 가수 필드의 bit수가 많아질수록 수를 더 정확하게 표현할 수 있으며,

지수 필드의 bit수가 많아지면 | 2^E | 의 최댓값이 커지므로 표현할 수 있는 수의 범위가 증가하게 된다.

 

 그러나 데이터 길이가 고정된 상태에서 어느 한 필드의 bit수를 증가시키면 다른 필드의 bit수가 감소하므로, 적절히 조정하는 것이 필요하다.

 

예제)

10진수 69를 IEEE754 형태로 표현하라. (단, 부호: 1비트, 지수: 8비트, 가수: 23비트이다)

 

풀이)

  1. 10진수를 2진수로 변환
  2. 정규화 (소수점을 1.xxx 형태로 변환하는것)
    • 실제로는 1.xxx 전체가 가수이지만, 항상 모든 수가 1.xxx 로 끝나게끔 통일시켜두면 xxx 3비트만 저장하면 된다. 이는 4비트(4자리) 저장할 것을 한 자리라도 더 절감시키기 위해 사용하는 방식이다.
  3. 지수를 2진수로 변환 (단, 지수가 음수인 경우에는 2의 보수로 변환)
  4. 지수 바이어스 ( + 127, 01111111(2) )
  5. 정리하여 16진수로 표기

 

  1. 1000101
  2. 1.000101 * 2^6 ( ^6 = 소수점 6자리를 올렸기 때문 )
  3. 지수 62진수로 >> 00000110
  4. + 01111111 = 10000101
  5. 부호(1bit) , 지수(8bit), 가수(23bit) (가수 = 2번에서 소수점 아래만 해당, .xxx )

0 10000101 0001010..........

= 0100001010001010...... 를 16진수로 보기좋게 변경, >> 4자리씩 끊기

0x4 2 8 A 0 0 0 ....

∴ 0x428A0000