[cs] 고정 소수점, 부동 소수점

 


고정 소수점과 부동 소수점은 이진수만을 사용하는 컴퓨터에서 소수점이 포함된 실수를 표현하는 방식이다.




고정 소수점(Fixed Point)

  • 소수점이 고정된 형태이다.

  • 상위 1비트 부호비트(양수 0, 음수 1)와 정수부, 소수부로 구성된다.

  • 16bit의 경우 부호비트 1bit, 정수부 7bit, 소수부 8bit로 구성된다.

  • 표현법
    • 정수부 - 2진수 변환 방법 사용
    • 소수부 - 정수부의 반대(2를 곱해가면서 진행), 소수점부터 오른쪽으로 채워서 나머지는 0으로 채운다.
    # 10.375 (결과는 위에서 아래로)
    0.375 * 2 = 0.75	# 0
    0.75 * 2 = 1.5 		# 1
    0.5 * 2 = 1		# 1
      
    # 10.375 => 1010.011
    

image




부동 소수점(Floating Point)

  • 고정 소수점 방식에 비해 더 다양한 범위의 숫자를 표현할 수 있으며 비트 수 대비 정밀도 측면에서 높기 때문에 대부분의 컴퓨터 시스템에서 사용한다. 그러나 근사값을 저장하기 때문에 정확하지는 않다.


  • 표현 방식

    대부분 언어에서 4byte float 형식이 32 bit를 따른다.

    • 단정밀도(Single-Precision)

      • 실수형 중 4byte float 형

      • 32bit(부호-1bit, 지수부-8bit, 가수부-23bit)

      • 지수부가 2^8 = 256개의 수 표현 가능, bias = 127

        0~127 구간은 음수를, 128~255 구간은 양수를 표현한다.

    • 배정밀도(Double-Precision)

      • 실수형 중 8byte double 형

      • 64bit(부호-1bit, 지수부-11bit, 가수부-52bit)

      • 지수부가 2^11 = 2048개의 수 표현 가능, bias = 1023

        0~1023 구간은 음수를, 1024~2047 구간은 양수를 표현한다.

    • 4배정밀도 - 128bit(부호-1bit, 지수부-15bit, 가수부-112bit)


  • 표현법
    1. 고정 소수점 방법을 이용하여 변환 후 정수부에 1만 남을 때까지 소수점을 왼쪽으로 이동(정수부가 0일 경우 오른쪽)

      # 10.375 -> 1010.011 -> 1.010011 * 2^3
      # 지수부 : 2, 가수부 : 010011
      
    2. 지수부

      IEEE 754 표준을 따라 32비트를 사용하는 경우 bias=127을 더해서 사용한다.

      지수부가 음수일 경우
      ex) 2^-10 일 경우 127-10 = 117 -> 1110101
           
      지수부가 양수일 경우
      ex) 2^3 일 경우 127+3 = 130 -> 10000010
      

image