Fixed point VS Floating Point

Seungsoo Lee·2022년 11월 7일
0

cs

목록 보기
1/2
post-thumbnail

컴퓨터는 숫자들을 2진수로 표현을 한다.

그러면 실수와 같은 소숫점이 있는 숫자들은 어떻게 표현을 해야할까?
마찬가지로 2진수를 사용한다. 이런 소숫점이 있는 아이들은 2가지 방식으로 컴퓨터가 처리를 할 수 있는데 먼저 첫번째는 Fixed point(고정 소숫점), 그리고 두번째는 Floating Point(부동 소숫점)이다.

고정 소숫점이란?

소숫점 위치를 정해두고 sign bit, integer bit(정수부), fraction bit(소수부)로 나뉜다. 말 그대로 고정이기 때문에 소숫점 위치를 마음대로 정해서 넣어버리면 된다. 그러면,

  • 예를들어 123.45를 32비트에 집어 넣는다고 하자. integer bit를 5bit로 fraction bit를 26bit로 만들려고 하면, 다음과 같이 나온다.
    • 맨 앞은 sign bit 부호가 +라는 뜻이다.
    • 중간은 integer bit (정수부)이다. 123을 binary로 나타내면 저렇게 된다.
    • 마지막은 fraction bit (소수부)인데, 이것은 설명이 더 필요하다.

소수부 2진수 변환법

  • 이렇게 0.45를 2배해주면 0.9가 된다. 이러면 1보다 작기 때문에 binary로는 0이 들어가게 된다. 다음으로 0.9의 2배인 1.8이 1보다 크기 때문에 뒤에 1을 넣고 1을 뺴준다. 그러면 0.8이 된다. 이 과정을 우리가 필요한 bit만큼(위의 고정소숫점에서 26bit, 부동소숫점에서는 23bit) 구한다. 이러면 소수부의 2진수 변환이 되는것이다.

이러한 고정소수점 방식은 구현하기 편리하지만 사용하는 비트 수 대비 표현 가능한 수의 범위 또는 정밀도가 낮기 때문에 실수를 다룰 필요가 있는 범용 시스템에서는 거의 안 쓰이고, 높은 정밀도가 필요없는 소규모 시스템에서는 간혹 쓰이기도 한다고 한다.

따라서 이런 문제를 해결하기 위해서 소수점을 고정하지 않고 둥둥 떠 다닐 수 있게 하는 부동 소수점(floating point)을 사용한다.

부동 소숫점이란?(IEEE754)

  • 부동소수점 표현 방식에서는 2진수로 변환한 결과를 그대로 박아넣지 않고 몇 가지 과정을 추가로 거친다.
  • 부동소숫점은 sign bit(부호), exponent(지수부), fraction(소수부)로 나뉜다.
  • 아래 과정을 설명을 해보겠다.
    • 먼저 123.45를 정수와 소수로 2진수 변환을 해준다.
    • 변환된 2진수를 정규화를 해준다. (소숫점 기준 왼쪽에 한자리 남기고 다 넘긴다).
    • 넘긴 만큼(2^6)인 6을 127에다가 더해준다. 그러면 133이 이제 exponent(지수부)가 된다.
    • 그리고 나머지 소수부 23자리를 넣어주게되면 마무리가 된다.

참고
https://gsmesie692.tistory.com/94
https://steemit.com/kr/@modolee/floating-point
https://en.wikipedia.org/wiki/IEEE_754

0개의 댓글