ABOUT ME

-

Today
-
Yesterday
-
Total
-

  • 컴퓨터의 데이터 표현 2 실수 표현
    Computer Architecture 2021. 7. 25. 15:14

     

    1. 2진수의 소수점 표현의 한계

    십진수 0.25를 이진수로 바꾸는 방식은 아래와 같다.

     

    dec-to-binary

    이 방법을 일반화 한 절차다.

     

    1. 절대값이 1보다 작은 10진수 소수에 2를 곱한다.
    2. 결과는 1을 넘거나 넘지 않을 것이다.
    3. 1을 넘었을 경우 결과에서 1을 떼어내고 다음 계산을 한다.
    4. 다시 2를 곱해준다.
    5. 결과는 역시 1을 넘기거나 넘지 않을 것이다.
    6. 1을 넘었을 경우 또다시 1을 떼어낸다.
    7. 소수점 이하에 아무 숫자도 남지 않을 때까지 곱셈을 반복한다.
    8. 이 과정에서 만들어진 결과의 정수 부분(0 또는 1)들을 순서대로 쓰면 해당 소수의 2진수 변환 값이 나온다.

    이 방법으로 십진수 0.765625와 0.1을 이진수로 바꿔보자.

     

    dec-to-binary-infinite-loop

    • 십진수 0.765625는 비교적 간편하게 이진수화 된다.
    • 십진수 0.1 은 이진수로 바꾸면 무한 소수가 된다. 
    • 0.1을 이진수화 하는 과정에서 곱셈에 사용된 소수(prime number)는 2뿐이다. 이를 원칙적으로 말하자면 곱셈에 소수 1과 2만 쓰였다고 볼수있다
    • 10은 인수 2와 5를 가지고 있다. 10의 배수가 되기 위해선 이 두 인수를 최소한 하나씩이라도 보유해야 한다. 따라서 소수 1과 2의 곱으로는 10의 배수조차 될 수 없다.

     

    이처럼 10진수의 세계에서 이진수의 세계로 소수점을 변환하는 것은 부담되는 작업이며, 많은 경우 정확한 변환이 불가능하다.

    이진수의 소수는 반올림이 된 수일 수 있다는 것을 항상 고려해야 한다. 정확한 계산이 필요할 경우 필요한 소수를 충분히 넉넉하게 저장하기 위해 많은 메모리를 요구한다.

     

    2. 고정 소수점(Fixed Point) 표현방식

    fixed-point-expression

    • 16번째 비트 뒤에 소수점이 찍혀 있다고 생각하면 된다.
    • 표현할 수 있는 수의 범위가 적어서 현재는 사용하는 곳이 별로 없다.
    • 위의 설명처럼 2의 승수에 따라서, 그에 해당하는 bit를 셋하면 된다. 승수가 마이너스일지라도 상관없다.
    • 사실 위의 그림 하단에 보이는 것처럼, 수학적 표현방식에 따라 소수점 위치는 바뀔 수 있다.

     

    3. 부동 소수점(Floating Point) 표현방식

    수의 표준 표현 방식(Normalized form)

     

    Normalized-form

    • Normalized form 표현에서 10진수는 항상 1보다 같거나 크고 10보다 작은 수를 소수점 왼쪽 정수 부분에 둔다.
    • 2진수는 1보다 같거나 큰 수가 1밖에 없다. 그래서 무조건 1이 온다.
    • 따라서 2진수의 Normalized form를 표현할 때 굳이 맨 앞 정수 부분의 1을 기록할 필요는 없다.

     

     

    단정도 부동 소수 형식

     

    floating-point-expression

    • 32bit 아키텍처에서 주로 사용된다
    • 8bit의 지수부는 기본적으로 -127이라는 상수가 존재하기 때문에 지수값이 기본적으로 이진수 1000 0000 (십진수 128)에서 시작한다고 보면 된다.
    • 23bit의 기수부에서는 위에서 설명한 Normalized form 표현에 따라 항상 존재하는 맨 앞의 정수 부분 1은 기록하지 않는다.
    • 23bit의 기수부를 사용해서 표현할 수 있는 10진수는 대락 소수점 이하 7자리 정도이다. 그보다 작은 수들은 반올림될 것이다.
    • 참고로 지수부가 255이고(1111 1111) 기수부가 0이면 무한 대수를 표현한다.

     

     

    배정도 부동 소수 형식

     

    64bit-floating-point-expression

    • 64bit 아키텍처에선 8바이트를 쓰는 배정도 부동소수 형식을 쓴다.
    • 단정도 부동 소수 표현에선 지수부에 127을 빼줬다, 배정도 표현에선 11 비트라는 지수부 크기에 맞게 1023을 빼준다.

    댓글

© 2021. gadeokexp All rights reserved.