부동소수점? IEEE754 표준

Dobi·2024년 5월 12일

들어가며

컴퓨터 상에서 부동소수점은 어떻게 표현이 될까? IEEE 754에 기술된 표준 표현방식을 정리해보려고 한다.

부동소수점?

부동소수점이라는 단어부터 어렵다는 생각이 든다. 관련된 단어들은 어떤 뜻일까? 부동부터 시작하면 부동(浮動) 이다 부동(不動) 이 아니다. 한자대로 뜻을 풀이하면 떠다니는 소수점(== Floating point) 이다.


기본형식


위와 같은 형태가 표현방식이고 각각이 의미하는 바는 다음과 같다.

  • s : 부호부(sign). 0은 +, 1은 - 를 표현
  • c : 가수부(fraction). 양의 정수로 표현. 정밀도에 따라 범위가 달라진다.
  • b : 밑수(base)/기수(radix). IEEE754 에서는 2 또는 10을 사용한다. (2진수와 10진수)
  • q : 지수부(exponent). 소수점의 위치를 나타냄.

32 비트의 단정밀도기준의 구성은 이미지와 같다.
12.375의 수치를 2진수 단정밀도로 표현한 이미지이다. 정수인 12가 정수부에 8비트로 표현되고, 0.375의 소수가 실수부에 표현된다.
위의 12.375를 1100.011(2) 로 변환한 결과를 정규화를 통해 1.100011이 도출된다. 이 값에서 1을 제외한 100011을 가수부에 표현한다. 1을 제외한 이유는 2진수의 경우 정규화를 거치면 가수부는 항상 밑수 2보다 작은 1로 시작하기에 1을 생략함으로서 1비트를 확보할 수 있다.
1100.011 에서 3번의 시프트연산으로 1.100011이 되었으므로 지수는 2^3이므로 3이다. 32비트 단정밀도에서 E-127 = 지수 가 되는데 따라서 E=127+3=130 = 10000010(2) 이다.

단정밀도 & 배정밀도?

왜 구분할까? 원주율을 끊어서 계산하듯 (3.14처럼) 상황에 따라 필요한 정밀도가 달라지기 때문이다,

  • 단정밀도 - 부호비트, 8비트 지수, 23비트 유효숫자 = 32비트로 표현하는 부동소수점
  • 배정밀도 - 부호비트, 11비트 지수, 52비트 유효숫자 = 64비트로 표현하는 부동소수점

특수케이스

  • 0

    IEEE 754 에서는 +0 과 -0을 구분한다.
    부호부(sign) 에 따라서 + - 를 구분하며, 지수부와 가수부 전부를 0으로 채운다.

  • 무한대

    overflow 가 발생했을 때 표현하는 값이다.
    0과 비슷하게 무한대를 + - 구분하고, 지수부는 모두 1, 가수부는 모두 0으로 채운다.
    e.g. n이 0이 아닐때, n/0 = +-∞

  • NaN (Not a Number)

    연산과정에서 잘못된 입력을 받아서 계산이 불가능한 경우를 나타낸다. 지수부는 모두 1, 가수부는 0이 아니게 표현하고 부호부는 의미를 두지않는다.

    • Quiet NaN
      잘못된 입력으로 인한 예외를 발생시키지 않고 NaN을 반환하여 연산을 지속한다. 가수부를 전부 1로 채운다.
    • Signaling NaN
      QuietNaN 과는 반대로 잘못된 연산시 예외를 발생시킨다. 대부분의 가수부를 0으로 채우고 최소 1개의 비트를 1로 채운다.
  • Denormalized

    정해진 비트값의 가수부와 지수부로 표현하지 못하는 값의 케이스.

    binary32 에서 위의 케이스의 경우 지수부의 표현범위를 벗어나서 표현이 불가하다. 이런 케이스들의 경우 비정규화된 수를 사용하는데 이를 점진적 언더플로우(gradual underflow) 동작을 한다고 말한다.
    지수부는 모두 0, 부호부와 가수부로 값을 표현한다.


Rounding rule?

ieee754에서 가수부의 표현범위를 넘어가는 경우, 원본값과 가장 가까운 값을 표현하기 위한 반올림 방식이다.

  • round up 올림

    반올림 처리시 +∞ 의 방향으로 올림처리. 단, 음수의 경우 0의 방향으로 향하기에 절대값으로 기준으로 보면 숫자가 버림이 된다.

  • round down 버림

    반올림 처리시 -∞ 방향으로 내침처리. 단, 음수의 경우 절대값 기준으로 보면 올림처리가 된다.

  • round toward zero 절삭

    반올림 처리시 항상 0의 방향으로 가장 가까운 숫자를 선택한다.

  • round to nearest, ties away from zero

    큰 절대값으로 반올림. 가장 가까운 값이 2개인 경우 절대값 기준으로 가장 큰값을 선택한다. e.g. -0.5 = -1,

  • round to nearst, ties to even

    짝수로 반올림. 소수의 앞 자리 숫자가 짝수인 경우, 가장 가까운 작은 정수로 반올림. 홀수인 경우, 가장 가까운 큰 정수로 반올림한다. e.g. 4.5 = 4, 5.5 = 6


참조

IEEE 754 - 2008
부동소수점의 이해

profile
양말 받을 때까지 공부하는 개발자 도비

0개의 댓글