TIL::Today I Learn

[TIL] 20230708

madylin 2023. 7. 18. 19:26
반응형

오늘 공부한 내용📓

- C++

개념 공부

고정소수점

  • 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해두고, 해당 비트만 사용하여 숫자를 표현하는 방식
  • 한정된 비트에 정수와 소수를 표현해야하기 때문에, 나타낼 수 있는 범위가 한정적인 문제
  • 아래 처럼 32비트를 쪼개 실수를 표현
    • [   1  ][         15        ][           16         ] 
    • [sign][integer part][fractional part]
    • 처음 1 비트는 sign(부호) 이며, 양수는 0 음수는 1
    • 다음 15 비트를 integer(정수부)
    • 다음 15 비트를 fractional(소수부)
    • 정수부에 정수값을 2진수로 바꾸어 넣고, 소수부에 소수값을 2진수로 바꾸어 넣은 후, 남은 자리는 0으로 채움

부동소수점

  • 소수점의 위치를 고정하지 않고, 그 위치를 나타내는 수를 따로 적는 방식으로, 유효숫자를 나타내는 가수와 소수점의 위치를 나타내는 지수로 나누어 표현함
  • 부동소수점은 다양한 방식이 있고, 일반적으로는 IEEE754 를 표준으로 함
  • 실수 연산이 부정확할 수 있다는 단점이 있음

ex02 구현

  • subject 에서 요구하는 내용은 단순히 소수부를 8 비트로 사용하여, int 변수에 fixed-point 값을 저장하라고 한다.
  • 그래서 아래처럼 단순하게 비트를 구성하는 것으로 이해하고 진행했다.
    • [    24   ][     8     ]
    • [ 정수부 ][ 소수부 ]
  • 기본적인 개념으로는, 만약 10.01 이라는 2진수를 비트에 넣어야 한다면, 비트연산을 통해 8 만큼을 왼쪽으로 밀어줘야 한다. (그래야 정수부에 10이, 소수부에 01이 들어가기 때문)
    • [000000000000000000000010][01000000]
  • 값을 받아 저장하는 프로세스는 다음과 같다.
    • 받아온 10진수 값에 8비트를 왼쪽으로 밀어준다( = 256을 곱한다 )
    • 만약 소수값이라면 int에 저장할 수 없기 때문에, roundf 를 사용하여 반올림한 후 저장한다.
    • ex
      • 값이 10인 경우
        • 10 에 256 을 곱한 2560이 int 변수에 저장됨
      • 값이 10.01인 경우
        • 10.01 에 256 을 곱한 2562.56 을 roundf 로 소숫점을 반올림하여, 2563이 int 변수에 저장됨
  • 저장한 값을 출력하는 프로세스는 다음과 같다.
    • int 변수에 저장된 값에 8비트를 오른쪽으로 밀어준다( = 256을 나눈다 )
      • ex
        • 값이 10인 경우
          • 저장된 2560 에서 256을 나눈 후 10을 출력함
        • 값이 10.01인 경우
          • 저장된 2563 에서 256을 나눈 후 10.0117을 출력함 (정확한 원래 값으로의 출력은 할 수 없다)

 

 

제가 공부한 내용을 기록하고 있습니다.

혹시 수정이 필요한 부분이 있다면, 댓글로 지적 부탁드립니다!

선한 관심과 도움 감사드립니다😊

반응형

'TIL::Today I Learn' 카테고리의 다른 글

[TIL] 20230718  (0) 2023.07.28
[TIL] 2023714  (1) 2023.07.18
[TIL] 20230707  (0) 2023.07.08
[TIL] 20230705  (0) 2023.07.06
[TIL] 20230704  (0) 2023.07.06