본문 바로가기
Aiffel/Fundamental

부동소수점, 고정소수점

by EDGE-AI 2021. 12. 28.

부동소수점(floating point)은 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로, 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현한다.

예시

−118.625 (십진법)을 IEEE 754 (32비트 단정밀도)로 표현해 보자.

  • 음수이므로, 부호부는 1이 된다.
  • 그 다음, 절댓값을 이진법으로 나타내면 1110110.101이 된다.
  • 소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만든다. 예를 들면 1110110.101=1.110110101×2⁶ 과 같다. 이것을 정규화된 부동소수점 수라고 한다.
  • 가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수 부분만큼 0으로 채워 23비트로 만든다. 결과는 11011010100000000000000이 된다.
  • 지수부는 지수에 bias를 더한 값을 2진수로 변환한 수를 넣는 부분이다. bias는 32비트에서는 127, 64비트에서는 1023이다. 
  • 32비트 IEEE 754 형식에서는 Bias는 127이므로 6+127 = 133이 된다. 이진법으로 변환하면 10000101이 된다.

이 결과를 정리해서 표시하면 다음과 같다.

 


고정소수점 소수점을 사용하여 고정된 자리수의 소수를 나타내는 것이다. 한정된 메모리에서 부동소수점 방식보다 좁은 범위의 수만 나타낼 수 있다.

  • 부호비트는 실수의 부호를 나타내는 비트 자리로 실수가 음수라면 1을, 양수라면 0을 넣는다.
  • 정수부에는 실수의 정수 부분을, 소수부에는 실수의 소수부분을 넣는다.
  • 정수부와 소수부의 경계 부분을 소수점의 위치로 생각하고 수를 그대로 넣으면 된다. 숫자들을 넣고 남은 칸들은 모두 0으로 채워진다. 

예시

21.25를 예를 들어 표현하면 다음과 같다.

  • 부호비트: 0 (10101.01이라는 실수는 양수이기 때문이다.)
  • 정수부: 10101 (정수 부분의 수)
  • 소수부: 01 (소수 부분의 수)

나머지 빈 공간은 모두 0으로 체워준다.

 

 

 

참고자료

https://ko.wikipedia.org/wiki/고정소수점

https://ko.wikipedia.org/wiki/부동소수점

https://tcpschool.com/cpp/cpp_datatype_floatingPointNumber 

https://jiminish.tistory.com/81

 

'Aiffel > Fundamental' 카테고리의 다른 글

파이썬 모듈 및 패키지 개념 정리  (0) 2021.12.29
정규표현식  (0) 2021.12.29
Markdown 작성하기  (0) 2021.12.28
Linux 명령어 모음  (0) 2021.12.28
피보나치 수열 파이썬으로 구현하기  (0) 2021.12.28

댓글