-
컴퓨터의 데이터 표현 2 실수 표현Computer Architecture 2021. 7. 25. 15:14
1. 2진수의 소수점 표현의 한계
십진수 0.25를 이진수로 바꾸는 방식은 아래와 같다.
이 방법을 일반화 한 절차다.
- 절대값이 1보다 작은 10진수 소수에 2를 곱한다.
- 결과는 1을 넘거나 넘지 않을 것이다.
- 1을 넘었을 경우 결과에서 1을 떼어내고 다음 계산을 한다.
- 다시 2를 곱해준다.
- 결과는 역시 1을 넘기거나 넘지 않을 것이다.
- 1을 넘었을 경우 또다시 1을 떼어낸다.
- 소수점 이하에 아무 숫자도 남지 않을 때까지 곱셈을 반복한다.
- 이 과정에서 만들어진 결과의 정수 부분(0 또는 1)들을 순서대로 쓰면 해당 소수의 2진수 변환 값이 나온다.
이 방법으로 십진수 0.765625와 0.1을 이진수로 바꿔보자.
- 십진수 0.765625는 비교적 간편하게 이진수화 된다.
- 십진수 0.1 은 이진수로 바꾸면 무한 소수가 된다.
- 0.1을 이진수화 하는 과정에서 곱셈에 사용된 소수(prime number)는 2뿐이다. 이를 원칙적으로 말하자면 곱셈에 소수 1과 2만 쓰였다고 볼수있다
- 10은 인수 2와 5를 가지고 있다. 10의 배수가 되기 위해선 이 두 인수를 최소한 하나씩이라도 보유해야 한다. 따라서 소수 1과 2의 곱으로는 10의 배수조차 될 수 없다.
이처럼 10진수의 세계에서 이진수의 세계로 소수점을 변환하는 것은 부담되는 작업이며, 많은 경우 정확한 변환이 불가능하다.
이진수의 소수는 반올림이 된 수일 수 있다는 것을 항상 고려해야 한다. 정확한 계산이 필요할 경우 필요한 소수를 충분히 넉넉하게 저장하기 위해 많은 메모리를 요구한다.
2. 고정 소수점(Fixed Point) 표현방식
- 16번째 비트 뒤에 소수점이 찍혀 있다고 생각하면 된다.
- 표현할 수 있는 수의 범위가 적어서 현재는 사용하는 곳이 별로 없다.
- 위의 설명처럼 2의 승수에 따라서, 그에 해당하는 bit를 셋하면 된다. 승수가 마이너스일지라도 상관없다.
- 사실 위의 그림 하단에 보이는 것처럼, 수학적 표현방식에 따라 소수점 위치는 바뀔 수 있다.
3. 부동 소수점(Floating Point) 표현방식
수의 표준 표현 방식(Normalized form)
- Normalized form 표현에서 10진수는 항상 1보다 같거나 크고 10보다 작은 수를 소수점 왼쪽 정수 부분에 둔다.
- 2진수는 1보다 같거나 큰 수가 1밖에 없다. 그래서 무조건 1이 온다.
- 따라서 2진수의 Normalized form를 표현할 때 굳이 맨 앞 정수 부분의 1을 기록할 필요는 없다.
단정도 부동 소수 형식
- 32bit 아키텍처에서 주로 사용된다
- 8bit의 지수부는 기본적으로 -127이라는 상수가 존재하기 때문에 지수값이 기본적으로 이진수 1000 0000 (십진수 128)에서 시작한다고 보면 된다.
- 23bit의 기수부에서는 위에서 설명한 Normalized form 표현에 따라 항상 존재하는 맨 앞의 정수 부분 1은 기록하지 않는다.
- 23bit의 기수부를 사용해서 표현할 수 있는 10진수는 대락 소수점 이하 7자리 정도이다. 그보다 작은 수들은 반올림될 것이다.
- 참고로 지수부가 255이고(1111 1111) 기수부가 0이면 무한 대수를 표현한다.
배정도 부동 소수 형식
- 64bit 아키텍처에선 8바이트를 쓰는 배정도 부동소수 형식을 쓴다.
- 단정도 부동 소수 표현에선 지수부에 127을 빼줬다, 배정도 표현에선 11 비트라는 지수부 크기에 맞게 1023을 빼준다.