본문 바로가기

Lobo's study room/c lang.

부동소수점과 정규화

오늘날 대부분의 컴퓨터는 2의 보수를 쓴다.

컴퓨터에서 정수값, 정수식를 표현할때는 수의 표현범위를 생각해주어야 하고,

부족하다면 1)비트를 늘리거나(2배씩) 2)부호를 쓰지 않고 표현할 수 없을지 생각해보자.

 

#부동소수점(Floating Point Num)

 

1.234

12.34

 

해수욕장의 부표 Float

 

정수 부분과 소수점 부분을 쪼개서 저장한다면 정수 2개!

정수 2개를 저장해주는 경우를 생각해보자. 간편하다!

다만... 

0.000000000000000001 의 경우에서는 메모리낭비가 심하다.

 

ex)

-1.234 = -0.1234 * 10의 1

-12.34 = -0.1234 * 10의 2승

-123.4 = -0.1234 * 10의 3승

로 모양을 바꿔주는 정규화(Normalizing)!

즉, 부호, 가수, 지수부 총 3가지 구성요소를 뽑아서 저장하자.

 

cf)고정소수점(fixed-Point)

12. ; 정수

 

ex)-3.625가 컴퓨터에서는 어떻게 저장이될까?

우선 2진수로 바꿔주자.

-11.101

ex)12.345

= 1*10의1승 + 2*10의0승 + 3*10의-1 + 4*10의-2승 + 5*10의-3승

 

ex)컴퓨터에서 0.1을 나타낼수 있을까?

No... 컴퓨터에서 정확한 0.1은 표현할 수 없다.

근사치의 값을 사용하는 것!

소수점 자리에서 반올림된 값을 쓴다.

 

#IEEE754

 

컴퓨터에서는 산업표준에 맞춰서 부동소수점이 표현이 된다.

 

32비트를 써서 표현할 때

 

-11.101

 

부동소수점은 정규화 과정을 거쳐서 부호, 가수부, 지수부 3가지 구성요소를 뽑아내서 저장한다.

 

64비트는 부호로 1, exponent로 11개, 나머지 52개 가수부...

 

-1의 1승 = -1 / -1의 0승 = 1

따라서 부호는 (-1)의 x승으로 표시

 

정수 연산이  부동소수점 연산보다 훨씬 빠르다.

같은 연산식이라면 가능한 정수연산을 쓰는게 좋다.

 

비트코인에 그래픽카드 필요한 이유?

 

GPU (Graphic Processes Unit) 이 들어간다!

부동소수점 연산을 최적화시켜서 돌아갈수 있게 해 주는 GPU!

 

가중치값을 바꿔가면서 학습시키는 인공지능에도 들어가는 GPU

 

#386?!

80386 Intel에서 만든 CPU이름

32비트 마이크로프로세서

PC에서 32비트로 갔다! 

미니 컴퓨터 32비트 / PC에서도 32비트...

리눅스는 80386프로세서에서 만들었다.

지금의 Intel이 있게 만든것.

하지만 부동소수점은 안되서.. CAD 프로그램이 돌아가지 않았다.

정수연산으로 내부적으로 바꿔줘야 함.

emulating해서 하면 속도가 느려서 30387을 꼽아서 사용.(부동소수점 전용 프로세서)

 

80486으로 가면서 부동소수점 연산하는 기능을 하나의 칩으로 통합시킴.

가격도 싸지고 전기도 적게 먹지만 가격이 비싸다!

 

가정용으로는 부동소수점 연산기능을 뺀 칩 사용.

 

80586으로 가면서 부동소수점 core가 기본으로 들어감.

 

지금 컴퓨터에는 부동소수점연산기능이 기본으로 포함되어있다.

예전에는 없었음..

 

cortex Micro Controller는 arm이라는 회사에서 만든 32비트 프로세서

cortex m3->m4의 차이는 부동소수점 연산기능이 들어간것!

 

 

 

 

 

 

 

 

 

 

'Lobo's study room > c lang.' 카테고리의 다른 글

멀티미디어데이터의 표현  (0) 2022.04.11
ASC II 코드와 UNI-code  (0) 2022.04.11
부호 절대치 표현과 보수  (0) 2022.04.10
컴퓨터와 비트  (0) 2022.04.09
Queue, Circular Queue, Linked list  (0) 2022.02.14