Float Exposed

4 days ago 8

  • 이 글은 부동 소수점(float) 값이 어떻게 메모리상에서 저장되고 표현되는지 설명함
  • 값의 16진수, 10진수 형태와 실제 수치로의 변환 방법에 초점을 맞춤
  • 기호(Sign), 지수(Exponent), 가수(Significand) 영역 정의와 각각의 역할 설명
  • 특정 float 값이 정확히 어떤 2진, 10진 값을 나타내는지 해석 방법 예시 포함
  • 표현 가능한 값 사이의 차이(Delta) 계산 내용도 언급함

부동 소수점 값의 저장 구조 분석

  • "halfb float float double" 등 다양한 부동 소수점 포맷이 존재함
  • 각각의 값은 Raw Hexadecimal Integer Value(16진수 정수 값) , Raw Decimal Integer Value(10진수 정수 값) 와 같이 메모리 내 저장값으로 확인 가능함
  • 16진수 데이터는 Hexadecimal Form ("%a") 로, 실제 부동 소수점 표기와 연결됨
  • 각각의 값의 위치는 Significand–Exponent Range(가수–지수 범위상 위치) 로 나타내어짐

2진수 및 10진수 값 해석 방법

  • 부동 소수점 수는 Base-2(2진법 평가식) 으로 다음과 같이 표현 가능함:
    • (−12)02×​102(100010012 − 011111112)​×​1.011111110010100000000002
      → 2진 표현식을 통한 수치 평가임
  • Base-10(10진법 평가식) 에서는 이런 형태임:
    • 1×​210×​1.4967041015625
      → 2의 10제곱과 소수 부분의 곱으로 표현함
  • 실제로 변환 시의 정확한 10진수 값도 표시됨:
    • 1.532625×​103 같은 식으로 제시됨

인접 값과의 거리(Delta) 계산

  • 표현 가능한 값들 사이의 Delta(간격) 는 중요한 의미를 가짐
  • 다음(Next)혹은 이전(Previous)으로 표현 가능한 값과의 거리(Delta to Next/Previous Representable Value) 를 각각 제공함
    • 예: ±1.220703125×​10-4
  • 이 간격은 부동 소수점 값의 유효 자릿수/정밀도와 연관됨

요약

  • 부동 소수점의 메모리 표현 및 2진, 10진 변환 원리
  • sign, exponent, significand 구조 설명
  • 표현 범위와 인접 값과의 간격 정보도 함께 정리함

Read Entire Article