언리얼 - C++ 3 : 실수형 자료형, 부동소수점

김정환·2025년 3월 11일

Unreal C++

목록 보기
3/37

📘 실수형 자료형 정리 요약

  • 정수와 실수의 표현 방식은 다르다.
  • 실수는 표현 방식에서 정밀도에 의존한다.
    • double(8)은 float(4)보다 더 아래의 소수점까지 정확하게 표현이 가능하다.
  • 정수는 정수끼리, 실수는 실수끼리 연산하되
    두 표현 방식의 피연산자가 연산될 경우 명시적으로 변환해주자.
float f = 10.241f + (float)20;
  • 위의 경우 없어도 형변환이 일어나지만,
    제어를 정확하게 하기 위해서 명시적으로 형변환을 시켜주자는 것.

1️⃣ 실수형 자료형

처리 방식이 달라 정수와 실수를 구분함

  • 정수 : char(1), short(2), int(4), long(4), long long(8)
    • 본래 4 byte 크기의 정수형 자료형은 long이었음.
    • int는 본래 가변적으로 사용하도록 설계됐으나, 오랜시간 사용하다보니 자연스레 4 byte로 크기가 굳어짐.
  • 실수 : float(4), double(8)
    • 0 ~ 1 값으로만 보더라도 무수히 많은 수가 존재함.
    • 컴퓨터는 이진법으로 수를 표현하는데 이렇게 많은 수를 표현하기엔 너무 한정적임.

컴퓨터가 실수를 표현하는 방법은?

부동소수점

  • 컴퓨터가 실수를 표현하는 방법
    • 정수와 실수는 표현 방법 자체가 다름.

만약 정수와 실수의 값을 섞어서 수식을 짠다면?

int a = 4 + 4.0;
  • 컴퓨터가 정수로 표현할 것인지 실수로 표현할 것인지 정해주어야 함.
  • 위의 과정에서 담기는 변수 a는 정수 타입이므로 4.0 실수는 정수로 형변환이 진행됨.
    • 의도치 않는 연산이 추가되는 것.
    • 또한, 의도치 않은 연산으로 인해서 실수가 날 수 있음.
      • 실수 -> 정수 형변환이 일어나면서 소수점 아래 값이 없어질 수도 있는 것.

부동소수점 개념

  • 실수에선 특정 수를 근사값으로 표현.

    • 이때 double은 더 큰 메모리 용량을 사용하여 더 정확하게 수를 표현할 수 있음.
  • 32 bit => 4 byte => float의 경우 소수표현

    • 예) 51.1
      • 10진법 : 100을 위해선 10이 10개 모여야함.
        만약 1을 만들려면 0.1이 10개 모여야 함.
      • 2진법 : 101010.1(2)의 경우,
        • 1을 만들려면 0.1이 2개 필요함.
          이때 0.1은 10진수 값으로 치환하면 0.5에 해당하는 값이라 할 수 있음.
          0.1 == 2-1 == 1/2
        • 0.1을 만들려면 0.01이 2개 필요.
          0.01 == 2-2 = 1/4
        • 0.01을 만들려면 0.001이 2개 필요.
          0.001 == 2-4 = 1/8
          ...
      • 컴퓨터는 이런 식으로 소수 부분을 표현함.
    • 실수의 bit 구성
      • 부호 비트 MSB
      • 지수 부분
      • 가수 부분
  • 만약 0.72475의 값이 있다고할 때, 이를 실수로 표현한다면

    • 위의 과정으로 계속해서 소수점 아래 값(가수 부분)을 더해나가야함.
    • 하지만 그렇다보면 당연히 정확한 표현이 아니라 최대한 가까운, 근사치를 갖게되는 것.
      • double의 경우 더 정교한, 더 자세한 근사치를 얻을 수 있을 것

    실수형 자료는 값을 정확하게 표현하는 것이 아님.
    근사치를 통해서 최대한 가까운 값으로 나타냄.

  • 이러다보니까 실수를 다룰 때, 두 값이 정확하게 일치하지 않을 수 있다는 것.

    float a = Method(); // 1f
    
    a == 1.f;

    1f를 반환하는 메서드가 1.f와 같은지 비교하는 것이 성립하지 않을 수 있다는 것.
    부동소수점으로 인한 근사값 사용으로 인해서 두 값이 정확하게 일치하지 않을 수 있음.

    이런 상황 때문에 실수의 정밀도 개념을 꼭 숙지해야하는 것.

profile
만성피로 개발자

0개의 댓글