고정 소수점과 부동 소수점

이다은·2023년 3월 17일
0

고정 소수점

🥸 고정 소수점은 소수부의 자릿수를 미리 정하여, 고정된 자릿수의 소수를 표현하는 것입니다.

특징

  • 부동 소수점 방식에 비해 연산 속도가 빠르다.
  • 표현할 수 있는 실수의 범위가 적다.

구성

  • 부호 비트: 양수라면 0이, 음수라면 1이 들어간다.
  • 정수부: 정수를 2진수로 변환한 값이 들어간다.
  • 소수부: 소수를 2진수로 변환한 값이 들어간다.

표현 방식

예시) 21.25 (32비트일 때의 상황)

  1. 부호 비트에는 양수라면 0을, 음수라면 1을 넣어준다.
  2. 10진수 정수를 2진수로 변환한 뒤 정수부의 뒤쪽부터 채워 넣는다.(10101)
  3. 10진수 소수를 2진수로 변환한 뒤 소수부의 앞쪽부터 채워 넣는다.(01)
  4. 남은 빈 칸에 0을 채워 넣는다.


부동 소수점

🥸 부동 소수점의 '부동'은 움직이지 않는다는 뜻이 아니라 떠다닌다, 부유하다의 의미를 가지는 부동(浮動)입니다. 고정되지 않고 움직이는 소수점을 뜻합니다.

특징

  • 고정 소수점 방식보다 연산 속도가 느리다.
  • 10진수 소수를 2진수로 변환할 때 정확히 표현되지 않는 경우에는 근삿값으로 표현된다.
  • 정수 부분과 소수 부분의 자릿수가 일정하지 않으나, 유효 숫자의 자릿수는 정해져 있다.
  • 표현할 수 있는 실수의 범위가 넓다.
  • javascript에서는 숫자 타입의 값은 배정밀도 64비트 부동 소수점 형식을 따른다.
    (52비트는 숫자를, 11비트는 소수점의 위치를, 1비트는 부호를 저장하는데 사용한다.)

구성

  • 부호 비트: 양수라면 0이, 음수라면 1이 들어간다.
  • 지수부: 정규화해서 나온 지수와 bias를 더한 값을 2진수로 변환한 수를 넣는 부분이다.
    bias는 32비트에서는 127, 64비트에서는 1023이다.
  • 가수부: 정규화해서 나온 소수점 아래부분을 말한다.

    🔥 21.25를 정규화하는 방법
    1. 정수, 소수를 2진수로 바꾼다.(10101.01)
    2. 정수부에 1만 남도록 소수점을 왼쪽으로 옮겨준다.
    3. 결과: 1.010101 * 2^4(지수는 소수점을 왼쪽으로 옮긴 횟수)


표현 방식

예시) 21.25 (32비트일 때의 상황)

  1. 부호 비트에는 양수라면 0을, 음수라면 1을 넣어준다.
  2. bias + 지수를 계산한 값을 2진수로 변환하여 지수부에 넣어준다.(131 -> 10000011)
    부호 비트 바로 뒤 칸부터 차례대로
  3. 정규화한 소수점 아래 부분을 가수부에 넣어준다.
    지수부 바로 뒤 칸부터 차례대로
  4. 남은 빈 칸에 0을 채워 넣는다.


🔥 10진수 정수 및 소수를 2진수로 변환하는 방법

  • 10진수 정수 -> 2진수


  • 10진수 소수 -> 2진수

🧐 해당 글은 이곳(고정 소수점, 부동 소수점)이곳(10진수 -> 2진수)을 참고하여 작성하였습니다.

profile
안녕하세요

0개의 댓글