Computer Science/Tech

[Tech] IEEE754 부동 소수점(Floating Pointing)

ooeunz 2020. 4. 3. 16:09
반응형

일반적으로 사람은 정수를 표현할 때 10진수를 사용하여 표현합니다. 하지만 컴퓨터는 사람과 달리 2진수를 이용해 수를 표현해야 하기 때문에 자릿수에 따라 의미를 부여하는 방식을 이용해 수를 표현하곤 합니다. 대표적인 방식으로 부호화 방식이 있는데, 2진수로 표현된 수의 제일 앞자리를 부호비트로 사용하여 0일 경우 양수로 표현하고 1일 경우 음수로 표현하는 방법입니다.

 

그렇다면 음수는 어떻게 표현할까요? 음수를 표현하는 방식은 크게 두 가지로 나누어집니다.

 

 

고정 소수점

정수를 표현하는 비트와 소수를 표현하는 비트의 비트 수를 사전에 미리 정해두고 해당 비트만큼 의미를 부여하여 소수를 표현하는 방식입니다. 예를 들어 실수 표현에 4byte(32bit)를 사용하고, 부호 표현에 1bit, 정수 표현에 16bit, 소수 표현에 15bit를 사용하기로 약속한 소수 표현 방식이 있다고 가정해보겠습니다. 해당 시스템에서 263.3을 소수로 표현하게 되면 (0)0000000100000111.010011001100110 와 같은 수로 표현이 될 것입니다.

 

고정 소수점 방식을 사용하게 되면 사용하지 않는 비트를 낭비해야 한다는 단점이 있습니다. 정수를 표현하는 bit 수를 늘리면 더 큰 수를 표현할 수 있겠지만, 소수를 표현하는 bit가 상대적으로 작아지기 때문에 정밀한 수를 표현하기에는 무리가 있을 것입니다. 반면 소수를 표현하는 bit를 늘리게 될 경우 큰 수를 표현할 수 없게 됩니다.

 

이러한 문제점을 해결하기 위해 정수와 소수를 나타내는 비트를 사전에 정해 놓지 않고, 상황에 따라 변경되는 부동 소수점(floating point) 방식을 사용하게 됩니다. floating point란 소수점이 둥둥 떠다닌다는 의미로 쉽게 말해 소수점의 위치가 변한다는 뜻입니다.

 

 

부동 소수점

부동 소수점을 표현하는 방식은 대체로 IEEE에서 표준으로 제안한 IEEE754 방식을 사용합니다.

 

IEEE754 방식은 정수와 소수 부분으로 나눴던 고정 소수점 방식과는 다르게 지수 비트와 가수 비트로 나누어집니다. 지수 비트에는 소수점의 위치를 기록하고 가수 비트에는 수 전체의 형태를 기록합니다. IEEE754 방식을 사용해 소수를 표현하는 방식은 아래와 같습니다.

 

  1. 소수를 2진수로 변환합니다.
  2. 제일 앞에 있는 1 뒤로 소수점을 옮기고, 옮긴 만큼의 수를 지수비트에 기록합니다.
  3. 이동된 소수점 뒤의 모든 수를 가수 비트에 기록합니다.

예를 들어 아까 소수로 변환했던 263.3을 보도록 하겠습니다. 263.3을 소수로 표현하면 100000111.010011001100110... 와 같은 수가 될 것입니다. 그럼 먼저 제일 앞에 있는 1 뒤로 소수점을 옮겨 보도록 하겠습니다. 1.00000111.010011001100110 * 2^81 바로 뒤로 소수점을 옮기면서 8자리를 이동했기 때문에 100000111.010011001100110 = 1.00000111.010011001100110 * 2^8와 같이 표현할 수 있습니다. 이제 옮겨진 8칸 즉 2^8을 2진수로 표현한 수 10000111을 지수 비트에 기록하고, 나머지 소수점 뒤의 수 00000111.010011001100110을 가수 비트에 기록합니다.

이러한 방식을 사용해 263.3을 기록하게 되면 아래와 같이 표현할 수 있습니다.

 

부호 비트(1bit) : 0(양수)

지수 비트(8 bit) : 10000111 (127 + 8 = 135)

가수 비트(23 bit) : 00000111010011001100110

 

=> 0.010011001100110

 

 

하지만 이러한 부동 소수점 방식도 어느 정도 오차가 발생하기 때문에 주의해서 사용해야 합니다.

반응형