본문 바로가기

전공 테트리스/컴퓨터구조

[컴퓨터구조] 3. Floating points(부동 소수점)

1. 분수 이진수 (Fractionary Buinary Numbers)

 

  • “**Binary Point**” 를 기준으로 오른쪽 비트 = 2의 분수
  • rational number를 표현 (유리수)

  • 0b 0.1 = 0.5 / 0b 0.01 = 0.25 / 0b 0.001 = 0.125 / 0b 0.0001 = 0.0625 (1/16)
  • 2배 ← binary point → 1/2배
  • **1.0**에 수렴하는 수

$x / 2^k$ 의 형태인 수만 정확하게 표현이 가능하다. (= 유한한 표현)

  • 다른 수는 무한 반복…

 

 

 

2. fixed-Point 표현 (고정 소수점)

 

  • p.q Fixed Point 표현
    • 예) 17.14 fixed point representation
      • 1 bit = sign bit
      • 17 (p) = 정수 (integer)
      • 14 (q) = 실수 (fraction)
      • 정수 x = x / 2^14
      • 최댓값 : (2^31-1) / 2^14 ∺ 131071.999
    • <장점 . pros>
      • 간편함
      • 정수 연산을 사용하여 조작 가능
      • floatimg hardware 필요 없음
      • 많은 저가형 임베디드 프로세서, DSPs(디지털 시그널 프로세서)들에서 많이 사용됨
    • <단점. cons>
      • 광범위한 숫자 표현 불가능 (정수부와 소수부의 크기가 크지 않)

 

 

3. 부동 소수점 표현

 

IEEE standard 754 (754-1985, 754-2008, 754-2019)

  • 표준이 정해지기 전엔, 독특한 표현이 많았고 >>이식성문제<< 가 있었음
  • 모든 주요 CPU에서 지원
  • 주요 설계자인 William Kahan이 튜링 어워드 수상, 1989
  • 수치적 문제에 의해 주도됨 (driven bu numerical concerns)
    • Nice standard for rounding, overflow, underflow
      • rounding(라운딩)이란?
        • 연산 후 포맷에 저장하기 전, 추가 비트를 제거하는 법 (반올림)
    • 빠른 수행은 어려움
    • 수치 분석가들이 하드웨어 타입에서의 표준을 정의하는 데 더 우세
  • 표현법
    • Single precision (32-bit) : binary 32
    • Double precision (64-bit) : bynary 64
    • other representations…
      • binary16, binary128,…
      • Extended format,…

 

 

 

4. FP 표현

  • Encoding
    • s = sign bit (0=positive, 1=negative)
    • M = Mantissa (fractional, 실수) : 가수부
    • E = exponent (power of two) : 지수부

  • 정밀도 (Precision)
    • Single Precision (단일 정밀도) : 8 exp bits (E), 23 frac bits (M) ⇒ total 32 bits (float)
    • Double Precision (이중 정밀) : 11 exp bits (E), 52 frac bits (M) ⇒ total 64 bits (double)

 

1) FP 정규화된 값 (Normalized values)

 

  • exp ≠ 000..0, exp ≠111…1
  • Exponent → bias 표현법 사용 //
    • E = Exp - bias
    • 정렬하기 쉬움
    • 2의 보수가 아닌 이유? - 정렬하기 어려움, 지수부만 보고 값 비교하고 싶은데 -가 있어서 비교가 어렵
    • Exp = exponent에 의해 표현되는 unsigned value
    • Bias = 2^k - 1 (k = exp 비트 수)
      • Single precision (E=8) : 2^8-1 = 127 // (-126~127)
      • Double precision (E=11) : 2^11-1 = 1023 // (-1022 ~ 1023)
  • M = 1.xxxx
    • Significand - 정규화하면 첫번째 자리는 항상 1, 따로 저장할 필요 없음. (bianry point 뒤부터 저장)
    • 최솟값 : frac(M) = 000…0 (= 1.0)
    • 최댓값 : frac(M) = 111…1 (= 2.0 - ?)

 

 

 

 

 

2) 비정규화된 값

  • exp = 000..0
    • (floating point에서는 0에 근접한 값만 표현할 수 있기에 0을 표현하기 위함)
  • E = 1 - bias
  • M = 0.xxx…x
  • Case 1 : exp = 0.000..0, frac = 000…0
    • = 0.0 을 의미
    • +0, -0 둘 다 존재함을 주의! (MSB 비트로 인해)
  • Case 2 : exp = 0.000…0, frac ≠ 000..0
    • = 0.0의 근접값
    • 점진적인 언더플로우 - 감소하는 정밀도
    • 정규화된 최솟값 (Normailized smallest value)
      • 1.0000 0000 0000 0000 0000 0000 x 2^-126 = 1.0 x 2^-126
    • 비정규화된 최솟값 (Denormalized smallest value)
      • 0.0000 0000 0000 0000 0000 0001 x 2^126 = 1.0 x 2^-149

 

 

3) 특별한 가치 (Special values)

  • exp = 111…1
    • 잘 사용 안 함. 굉장히 큰 수
  • Case 1 : infinity를 의미
    • exp = 111..1, frac = 000…0
    • 오버플로우됨
    • +/- 둘 다 존재
    • e.g., 1.0/ 0.0 = -1.0/ -0.0 = infinity, 1.0/ -0.0 = -infinity
  • Case 2 : NaN (Not a Number)
    • exp = 111..1, frac ≠ 000…0
    • 숫자의 값을 결정할 수 없는 경우 사용, 잘못된 값, 정의되지 않은 값
    • e.g., 0.0/ 0.0, sqrt(-1), infinity - infinity , infinity *0.0,…

 

4) IEEE FP 16 대 구글 Bfloat16

  • 2018년에 TPUs를 위해 소개됨 (인텔 NPU 또한 마찬가지)
  • FP32와 동일한 유동적인 범위
  • 더 작아진 mantissa (가수부)는 전력과 물리적 실리콘 범위를 감소시킴

 

5) FP Addition (10진수)

 

6) FP Addition (덧셈)

 

 

7) FP 곱셈 (10진수)

 

 

8) FP 산술 하드웨어

  • FP multiplier (=비슷한 복잡도=) FP adder
    • significand (유효 숫자) 연산을 위해서는 adder 대신 multiplier를 사용
  • FP 산술 하드웨어의 일반적인 사용
    • addition, subtraction, multiplication, division, reciprocol, square-root, …
    • FP ↔ 정수 변환
  • 한 클럭 사이클 안에 연산을 끝내는 건 너무 오래 걸릴 것임
    •  
    • integer peration (보다 오래 걸림)
    • 느린 클럭은 모든 명령에 불이익을 끼침
  • 연산은 주로 여러 클럭을 돔
    • 파이프라인 수행

 

9) C의 부동 소수점 

  • 두 가지 수준 보장
    • float (single precision)
    • double (double precision)
  • 변환 (conversion)
    • double / float → int
      • 가수부 자름 (truncates fractional part)
      • 0에 가깝도록 rounding (반올림)
      • NaN / 범위에서 벗어날 경우, 정의되지 않음 - 일반적으로 TMin으로 설정 (최소값)
    • int → double
      • 정확한 변환, int가 ≤ 53 bit word 사이즈 내의 범위일 경우에만
    • int → double
      • 라운딩 모델에 따라 라운드 될

 

10) FP 예시

 

11) 누가 FP 정확도에 관심이 있나요?

  • 과학적 코드 (Scientific code)
    • 일상 소비자 관점 - 은행 뱅크 잔액 계산..이자… 적은 금액의 처리
  • 인텔 FDIV bug
    • 정확성 중요

 

Ariane 5 전략 (June 4, 1996)

  • 발사 (liftoff) 후 27초 후에 폭발
  • 위성의 가치 $500 million
  • Why?
    • 수평 속도를 부동소수점으로 계산함
    • 16 비트 정수로 변환함
      • Ariane 4에서는 16비트가 충분하다고 섬세한 분석을 통해 입증됨
    • 10년은 된 소프트웨어 모듈을 재사용함
      • Ariane5에서의 오버플로우
      • 소프트웨어에 대한 정확한 사양이 없음

 

5. C의 데이터 유형

  • 데이터 타입에 따라 주의해서 사용해야 함

 

 

6. 바이트 Odering

 

multi-byte word 안의 bytes들은 메모리 안에 어떻게 odered 될까?

  • Alpha와 PowerPC Mac은 칩의 전력이 켜졌을 때, 바이트 오더링 협약에 따라, 둘 중 어디든 run 가능
  • Problem - 서로 다른 머신 간에 네트워크를 통해 바이너리 데이터가 커뮤니케이션 될 때 발생

Big endian

  • LSB ———> MSB (least significant byte가 가장 높은 위치에 저장됨)
  • sun, PowerPC Mac, Internet

Little endian

  • MSB ———> LSB
  • Intel x86, ARM running Android & ios, RISC-V

 

7. Character세트

 

ASCII (아스키 코드) : 128 characters

  • 95 그래픽, 33 컨트롤

Latin -1 : 256 characters

  • ASCII + 96 개의 그래픽 캐릭터

Unicode (유니코드) : 32 -bit character set

  • 자바, c++, 등…
  • 세계 대부분의 알파벳과 기호
  • UTF -8, UTF-16 : 가변적인 길이의 인코딩
    • unicode transformation format

 

8. Strings 표현 (문자열)

  • String in C
    • 문자 배열로 인한 표현
    • 각각의 charater들은 아스키코드로 인코딩됨
      • 문자 세트의 표준 7비트 인코딩
      • 문자 '0'의 코드는 0x30
      • 숫자 i 의 코드는 0x30 +i
    • 문자열은 null로 끝나야 함, = 0 x 00
  • 호환성 (compatibility)
    • 바이트 오더링은 문제되지 않음

 

 

 

 

 

참고

 

Floating Point(3)

C언어에서 실수를 저장하는 방법을 알아보자. 프로그래밍 언어마다 다를 수 있겠지만, 원리는 비슷하기 때문에 새로운 프로그래밍 언어를 배워도 해석하기 수월할 것이다.컴퓨터 내부는 전부 2

velog.io

 

 

고정 소수점, 부동 소수점이란?

컴퓨터는 0과 1, 즉 2진수로 이루어져 있다. 그래서 정수를 표현할 때는 123을 보내면 컴퓨터는 이를 이진...

blog.naver.com

 

 

고정 소수점 vs. 부동 소수점

실수의 표현 방식 컴퓨터에서 실수를 표현하는 방법은 정수에 비해 훨씬 복잡한데 이러한 이유는 컴퓨터에서는 실수를 정수와 마찬가지로 2진수(0&1)로만 표현해야 하기 때문에 다음과 같은 다

velog.io

 

 

[ 컴퓨터 구조 기초 ] IEEE 754 표준 특별한 값들(Special Values)

Arithmetic Formats IEEE 754 표준에서 표현할 수 있는 값들에는 위와 같은 값들이 있다. 정규화된 ...

blog.naver.com