[CE] Float 표현하기 : IEEE754

2022. 12. 28. 11:48·Computer/CE
728x90
728x90

실수 (Real Number) Representation

과학이나 공학분야에서는 real number를 다룰 때, 아주 큰 값이나 아주 작은 값 등의 매우 큰 범위의 수를 다루는 경우가 많음.

Real umber(실수)는 사람의 계산에선 주로 분수를 사용하나 컴퓨터에서는 float를 사용하게 된다.

 

Real number를 나타내는 float는

  • floating point number를 줄여 부르는 용어이며,
  • 우리나라 말로 "부동소수점"이라고 한다.
  • (부동=floating : 떠다니는. 浮動 뜰 부, 움직일 동)

 

이 문서에 설명할 내용이지만,

  • 특정 길이(32bit or 64bit)의 binary nubmer로 소수를 표현할 때,
  • 소수점의 위치가 고정(fixed)된 것이 아닌 지수(exponent)부 와 가수(mantissa or fraction)부로 나누어 표기하여
  • 소수점의 위치가 변동된다.

 

Real Number를 표현하는 (represent, or encoding)
대표적인 규약이 바로 IEEE754이다.

Floating Point Number의 장점

  • 고정소수점 방식에서 불가능한 매우 광범위한 수치를 표현가능 (단, 근사값임)
  • 비록 근사값이나 precision(정확도)도 효율적으로 잘 유지함.

Mantissa (가수), Exponent (지수), and Base (기수)

  • Mantissa : 표현가능한 유효 숫자에 해당함. Mantissa의 길이가 precision을 결정.
  • Exponent : 수치의 크기를 결정하게 됨.
  • Base : 몇 진수인지를 표현.

10진수에서의 예를 보면 다음과 같음.

  • 관측치 등의 표기에서 사용되는 Scientific notation에 익숙하다면 그리 어려운 개념이 아님.

IEEE 754

아래 그림처럼 정해진 bit 길이를 3부분으로 나누어 sign(부호), expoent, mantissa를 표현함.

많이 사용되는 변수형에 따른 bit 길이(bit size)와 구조를 표로 나타내면 다음과 같음.

변수형 크기 및 정확도 주로 저장되는 곳 구조: 가로 안은 bit수 의미
float (or float32) 32bit single precision memory s(1)+e(8)+m(23)
double (or float64) 64bit double precision memory s(1) + e(11) + m(52)
- 80bit extended precision Register s(1) + e(15) + m(63)
  • GPU등에서는 float32가 기본으로 많이 사용되고, CPU에서는 float64가 대세(가 되어가는 중)임.
    • Python의 수치해석 등에 많이 사용되는 CPU 기반의 NumPy의 경우, float64를 기본으로 사용 중이나
    • GPGPU를 기반으로 하는 경우는 TensorFlow나 PyTorch 모두 float32를 기본으로 사용함.

Example

$-0.04$ 를 float32로 나타내시오 (binary code로)

  1. 1번에서 보면, $-0.04$를 이진수로 표현하면 $-0.\color{red}{00001010001111010111}\dots$로 무한소수임. 여기서 붉은색의 숫자들이 반복된다.
    • 2022.09.05 - [Etc] - [Etc] 10진수 소수를 2진수로 변환.
  2. 이후, 2번과정에서 mantissa를 구하기 위해 scientific notation처럼 소수점 위에 유효숫자를 하나를 남기는 형태로 표현한다. 위 그림에서 녹색의 숫자들이 mantissa에 해당하며 23개의 bit에 해당함.
  3. 3번에서는 exponent를 구하는 과정으로 이진수이니 base가 2이고 지수(exponent)부분에서 $\text{bais} = - (2^{\text{bit_size_of_e}-1}-1)$를 더해서 2번에서 구한 지수부(위의 예제에선 $-5$)가 나오도록 exponent를 구함. 위의 예에서 bias는 exponent를 위해 할당된 bit수가 8이므로 $-(128-1)=-127$이되며, $-5=e-127$이므로 $e=122$(10진수표현)가 된다.
  4. 또한 sign은 negative이므로 sign은 1이 할당됨.

즉, 답은 다음과 같음.

$$1 01111010 01000111101011100001010$$

  • 맨 앞의 1은 negative sign
  • 이후 8자리는 -5승을 의미하는 exponent
  • 나머지 23자리는 소수점 아래의 유효숫자에 해당.

Not a Number (NaN) 표현

IEEE754는 0으로 나누는 경우의 결과와 같이 숫자가 아닌 특정 결과도 표시하기 쉬움.

물론 양과 음의 무한대(infinty)도 표현이 간단하다는 장점을 가짐.


예를 들어 32bit 에서 NaN은 다음과 같음.

s111 1111 1xxx xxxx xxxx xxxx xxxx xxxx
    • s는 일반적으로 무시됨. (sign을 나타내는 비트이나 NaN에선 의미가 없음)
    • x는 non-zero number임. (infinity를 나타내는 경우엔 모두 zero)
exponent 부분이 모조리 1로 처리하여 NaN 또는 infinity를 표현.

Reference

https://ko.wikipedia.org/wiki/IEEE_754

 

IEEE 754 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. IEEE 754는 IEEE에서 개발한 컴퓨터에서 부동소수점을 표현하는 가장 널리 쓰이는 표준이다. ±0 등의 수와 무한, NaN 등의 기호를 표시하는 법과 이러한 수에 대한

ko.wikipedia.org

2022.03.14 - [.../Physics] - 측정치에서 유효숫자 확인 및 과학적 표기법 (Scientific Notatoin)

 

측정치에서 유효숫자 확인 및 과학적 표기법 (Scientific Notatoin)

Significant figures (유효숫자) 모든 측정값은 근본적으로 근사값 임. 측정의 정확도에 한계(즉 오차가 존재)가 있기 때문에, 해당 오차보다 작은 수의 기재는 아무 의미가 없음. 즉, 유효한 (효력을

dsaint31.tistory.com

https://ds31x.tistory.com/402

 

[PyTorch] dtype 단축메서드로 바꾸기

아래의 URL에서 간단히 다룬 단축 method들을 이용한 방식 (to나 type이 아닌)을 설명하는 문서임.2024.03.15 - [Python] - [DL] Tensor: dtype 변경(casting) 및 shape 변경. [DL] Tensor: dtype 변경(casting) 및 shape 변경.Ten

ds31x.tistory.com

2023.02.01 - [Programming] - [Programming] Primitive Data Type : C, C++, NumPy, Torch

 

[Programming] Primitive Data Type : C, C++, NumPy, Torch

Primitive Data Type이(Unboxed type)란?C, C++, NumPy, PyTorch, TensorFlow 등에서 사용되는numeric data type들은보통 unboxed type 이라고도 불리는 primitive data type들이다.unboxed type에서는할당된 메모리 bit들이 해당 numeri

dsaint31.tistory.com

 


 

'Computer > CE' 카테고리의 다른 글

[CE] Portable Document Format (PDF)  (0) 2023.01.02
[CE] MapReduce  (0) 2022.12.30
[CE] 10진수 소수를 2진수로 변환.  (0) 2022.12.28
[CE] Micro Controller Unit (MCU) and Micro-computer  (0) 2022.12.18
[CE] Processor and Core  (0) 2022.12.18
'Computer/CE' 카테고리의 다른 글
  • [CE] Portable Document Format (PDF)
  • [CE] MapReduce
  • [CE] 10진수 소수를 2진수로 변환.
  • [CE] Micro Controller Unit (MCU) and Micro-computer
dsaint31x
dsaint31x
    반응형
    250x250
  • dsaint31x
    Dsaint31's blog
    dsaint31x
  • 전체
    오늘
    어제
    • 분류 전체보기 (740)
      • Private Life (13)
      • Programming (186)
        • DIP (104)
        • ML (26)
      • Computer (119)
        • CE (53)
        • ETC (33)
        • CUDA (3)
        • Blog, Markdown, Latex (4)
        • Linux (9)
      • ... (351)
        • Signals and Systems (103)
        • Math (172)
        • Linear Algebra (33)
        • Physics (42)
        • 인성세미나 (1)
      • 정리필요. (54)
        • 의료기기의 이해 (6)
        • PET, MRI and so on. (1)
        • PET Study 2009 (1)
        • 방사선 장해방호 (4)
        • 방사선 생물학 (3)
        • 방사선 계측 (9)
        • 기타 방사능관련 (3)
        • 고시 (9)
        • 정리 (18)
      • RI (0)
      • 원자력,방사능 관련법 (2)
  • 블로그 메뉴

    • Math
    • Programming
    • SS
    • DIP
  • 링크

    • Convex Optimization For All
  • 공지사항

    • Test
    • PET Study 2009
    • 기타 방사능관련.
  • 인기 글

  • 태그

    Convolution
    signal_and_system
    인허가제도
    Programming
    DIP
    fourier transform
    random
    SIGNAL
    math
    signals_and_systems
    linear algebra
    Probability
    numpy
    Vector
    SS
    opencv
    Optimization
    function
    Python
    Term
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
dsaint31x
[CE] Float 표현하기 : IEEE754
상단으로

티스토리툴바