[기본원리] 부동소수 표현 : 정규표현과 익세스 표현

반응형




읽기전에 손가락 한번 클릭~ >_<

고마워요 ~ Chu ~ ♥



부동 소수 표현

많은 프로그래밍 언어들은 소수 처리를 위하여
' 배정도 부정 소수 ( double - precision floating - point number ) ' 와
' 단정도 부정 소수 ( single - precision floating - point number ) '
라는 두가지의 방식을 제공합니다.

대부분 단정도 부동소수는 32비트의 자료형을 사용하고,
배정도 부동소수는 64비트의 자료형을 사용하고 있지요.
흔한 예로 ' double ' 자료형과 ' float ' 자료형이 그것입니다.
여기에서는 소수를 ' 부동소수 ' 로 표현하여 처리하게 됩니다.
부동소수란?
부동 소수란 0.123 X 10 ^ 3 또는  0.123 X  10 ^ -2  와 같이
소수점 위치와 다른 표기법으로 나타내는 방법입니다.

고정 소수란?
고정 소수란 실제 소수점을 나타내는 표기법, 즉 12.3  또는  0.0123 을 말합니다.



부동 소수점에서는 소수를 
  • 부호(sign)
  • 가수(significand)
  • 기수(base)
  • 지수(exponent)

라는 4개의 부분으로 나누어서 나타내는데요,

< 미국전기전자협회(IEEE) 의 숫자 규칙에 의한 것입니다 >

컴퓨터는 2진수를 사용하므로 기수(기초가 되는수) 는 무조건 2가 될 것입니다.
따라서 실제 기수를 포함하지 않고 부호, 가수, 지수 만으로도 표현이 가능 하지요.



부호는 한개의 비트로 나타내고 1이면 음수, 0이면 양수를 뜻합니다.
또한 수의 크기는 가수부와 지수부를 이용하여 표시하지요.
즉, 소수를 ' 가수 X 2의 지수제곱 ' 이라는 공식입니다.
y X 2 ^ z  =>  y 는 가수, z는 지수.

가수부와 지수부에 정수가 아닌 값은 어떨까요?
가수부에서는 ' 소수 이상의 값을 1로 고정 ' 하는 ' 정규표현 ' 이 있고,
지수부에서는 ' 익세스 ( excess ) 표현 ' 이 있습니다.
정규 표현이란 특정규칙에 따라 데이터를 정리하는 것을 뜻합니다.


정규표현과 익세스 표현

가수부에서 사용되는 정규표현은 다양한 형식으로 표현할 수 있는 부동소수를 하나로 통일해서 나타내기 위한 방법입니다.

 
  • 0.12 = 0.12 X 10 ^ 0
  • 0.12 = 12 X 10 ^ -2
  • 0.12 = 0.0012 X 10 ^ 2

 위처럼 같은 수를 표현하는 데에도 여러가지 방법이 있는데, 이렇게 많은 방법이 있다면 처리하기가 너무 힘들기 때문에 표현 방식을 하나로 통일할 필요가 있습니다.

즉, 10진수의 부동소수는 ' 소수 이상은 0으로 하고, 소수점 이하 첫 자리는 0이 아닌 값으로 한다 ' 라는 규칙을 정해 줍니다. 이렇게 하면 0.12는  ' 0.12 X 10 ^ 0 ' 이라는 방법으로 밖에 표현할 수 없게 되지요.
이런 규칙에 따라 소수를 표현하는 것이 정규표현 입니다.

2진수도 마찬가지로 정규표현을 쓰는데요,
2진수에서는 ' 소수점 이상의 값을 1로 고정 ' 하는 정규식을 사용합니다.
이것은 소수로 표시된 몇개의 2진수를 일정 횟수 오른쪽, 왼쪽 으로 쉬프트연산 하는 방식입니다.
2010/07/11 - [Programing/기본원리] - 재미있는 쉬프트 연산!



이렇게 진행됩니다 ^^

정수부의 첫 자리에 있는 1을 실제 데이터안에 포함시키지 않도록 만들고 있으며,
반드시 첫 자리를 1로 하기 때문에 이것을 생략할 수 있습니다.
또한 이것을 생략하므로써 비트 하나를 절약하는 효과를 낼 수 있는데요,
따라서 단정도 부동소수에서의 가수부가 23비트이지만 실제론 24비트를 표시할 수 있겠지요.
이러한 정규표현은 배정도 부동소수점에서도 동일한 방식으로 만들어집니다.


익세스 표현

익세스 표현이란 부호비트를 사용하지 않고 음수를 나타내는 방법입니다.
엥? 부호비트 없이 어떻게 음수를 나타내냐구요??
천천히 잘 읽어 보시지요 ㅎ

우선 지수부에서는 '-2 제곱 ' 처럼 음수를 나타내야 하는 경우가 있습니다.
익세스 표현은 지수부에서 나타낼 수 있는 최대값을 절반으로 나누고 ,
그 값을 0으로 바꾼 뒤에
그것을 부호와 크기를 나타내는데 사용하는 방법입니다.


  • 지수부가 8비트인 단정도 부동소수의 경우를 보겠습니다.

8비트의 최대값 11111111 = 255  의 절반인  01111111 = 127 (소수버림) 은 0을 나타내도록 만드는 것입니다.
여기에서 절반값인 127을 바이어스(bias) 라고 부릅니다.
따라서 8비트에서는 총 128 제곱 ~ -127 제곱 까지의 익세스 표현을 쓸 수 있는 것이지요.

만약, 익세스 표현에서 지수부가 2진수 11111111(10진수 255) 라면 무엇을 뜻할까요?
255 - 127 = 128  이기 때문에 128 제곱을 뜻하는 것입니다.

  • 지수부가 11비트인 배정도 부동소수의 경우를 보겠습니다.

11비트의 최대값 11111111111 = 2047 인데, 이것의 절반인 01111111111 = 1023 (소수버림) 이 0을 나타내게 되는 것이지요.

 




반응형

댓글(2)

  • 학부생
    2014.04.16 04:25

    와우...정말 잘 설명해주셔서 부동소수에 대한 궁금증이 해결되었습니다 감사합니다 ^ ^

  • 학부생2
    2022.01.07 12:10

    저도 12년전 게시글이지만 잘 참고하였습니다.

Designed by JB FACTORY