IEEE 754 표준

ahnjs·2023년 6월 10일
post-thumbnail

고정소수점과 부동소수점

컴퓨터에서 실수를 표현하는 방법으로 고정소수점 표현법과 부동소수점 표현법이 있다.

고정소수점

  • 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해놓고, 해당 비트만큼만 사용해서 숫자를 표현하는 방식이다.
  • 정수부와 소수부의 자릿수가 크지 않으므로, 표현할 수 있는 범위가 매우 적다는 단점이 있다.

부동소수점

  • 실수를 표현할 때 소수점의 위치를 고정하지 않고 과학적 표기법을 통해 그 위치를 나타내는 수를 따로 적는 방식이다.
  • 부동소수점에서 부동은 움직이지 않는다는 뜻의 不動이 아니라, 오히려 그 반대의 의미로 소수점이 떠다니며 움직인다는 의미의 부동 (浮動)이다.
  • 일반적으로 IEEE 754 표준방식을 따른다.

IEEE

  • IEEE는 미국 전자전기공학회(Institute of Electrical and Electronics Engineers, IEEE)의 약자로 표준 제정 등 다양한 활동을 하는 전문가 조직이다.
  • IEEE는 발음하기 살짝 어려운 측면이 있어 일반적으로 'I-triple-E(아이 트리플 이)'라고 발음한다.

IEEE 754 표준

  • IEEE 754 표준은 부동소수점을 저장하고 처리하는 방법을 표준화하여 컴퓨터에서 부동소수점을 사용할 때 일관성을 보장하기 위해 필요하며 가장 널리 쓰이는 표준이다.
  • 실수 표기 방식, 실수 연산에 관한 규정, 오버플로우/언더플로우의 처리, 반올림에 관한 규정 등을 정의하는 표준이다.
  • IEEE 754 표준에는 32비트(float - 단밀도, 필수구현) 형식 뿐 아니라 64비트(double - 배밀도) 등 타 형식들도 정의되어 있다.
  • IEEE 754라는 표준은 부동소수점 표현법의 비효율성을 해결하기 위해 다음과 같은 트릭을 사용한다.
    • 정규화를 통해 가수를 조정해서 맨 앞에 0이 없게 만든다.
    • 가수의 맨 왼쪽 비트가 1이라는 사실을 알고 있으므로 이를 생략하여 가수에 1비트를 더 사용할 수 있다.
  • 초기에는 부동소수점을 표현하기 위하여 컴퓨터마다 여러 가지 서로 다른 형식을 사용하였으나, 현재는 거의 대부분의 컴퓨터들이 호환성을 위해 IEEE 754 표준을 사용하고 있다.

형식

32비트 단정도 (single precision) 부동소수점 표현

  • 부동 소수점은 부호부, 지수부, 가수부로 나뉜다.
    • 부호부 (Sign) : 1비트. 숫자의 부호를 나타내며, 양수일 때 0, 음수일 때1이 됩니다.
    • 지수부 (Exponent) : 단정도의 경우 8비트, 배정도의 경우 11비트. 지수를 나타냅니다.
    • 가수부 (Mantissa, fraction, significant) : 단정도의 경우 23비트, 배정도의 경우 52비트. 가수 또는 유효숫자를 나타냅니다.
  • 32비트 단정도(single)가 기본이며, 비트 수를 두 배확장했다고 해서 64비트 배정도(double) 방식도 있다.
    • 단정도 (단 정밀도) : (부호부 1 비트, 지수부 8 비트, 가수부 23비트)
    • 배정도 (배 정밀도) : (부호부 1 비트, 지수부 11 비트, 가수부 52 비트)
  • 배정도를 사용하면 가수 부분의 자리수가 많으므로, 반올림 오차 등을 줄일 수 있으나, 단 정밀도에 비해 2배 이상의 메모리 및 계산시간이 필요함

방법

  1. 부호 부분은 양수일 경우 0, 음수일 경우 1로 표현한다.
  2. 절댓값을 이진법으로 나타낸다.
  3. 소수점을 왼쪽으로 이동시켜(정규화), 왼쪽에는 1만 남게 만든다(과학적 표기법).
  4. 가수 부분은 소수점의 오른쪽 부분이다. 가수부분 나머지 비트 수를 0으로 채운다.
  5. 지수 부분은 지수승에 Bias를 더하고 2진수로 표현한다.
  6. 부호비트, 지수부, 가수부를 합친다.
  • 예제(단정도)
15.25를 부동소수점 방식으로 변환

1. 부호부 0
2. 1111.01
3. 1.11101(가수부) * 2^3(지수부)
4. 11101000000000000000000
5. 127 + 3 = 130 -> 10000010
6. 0(부호비트)10000010(지수부)11101000000000000000000(가수부) = 0100 0001 0111 0100 0000 0000 0000 0000
  • Bias는 편향값으로 지수가 음수가 되는 경우를 방지하기 위해서 사용한다. 즉 지수와 양수, 음수를 나타내기 위한 방법이다.
    • Bias는 32비트에서는 127, 64비트에서는 1023

0개의 댓글