티스토리 뷰

부동소수점 표현(floating-point representation) : 소수점의 위치를 이동시킬 수 있는 표현 방법

부동소수점 수(floating-point number)의 일반적인 형태

N = (-1)S M × BE

단, S: 부호(sign), M: 가수(mantissa), B: 기수(base), E: 지수(exponent)

2진 부동소수점 수(binary floating-point number)

기수 B = 2

단일-정밀도(single-precision) 부동소수점 수 : 32 비트

복수-정밀도(double-precision) 부동소수점 수 : 64 비트

단일-정밀도 부동소수점 수 형식의 예

S: 1 비트, E: 8 비트, M: 23 비트

지수(E) 필드의 비트 수가 늘어나면, 표현 가능한 수의 범위 확장

가수(M) 필드의 비트 수가 늘어나면, 정밀도(precision) 증가

같은 수에 대한 부동소수점 표현

같은 수에 대한 부동소수점 표현이 여러 가지가 존재

0.1101 × 25

110.1 × 22

0.01101 × 26

정규화된 표현(normalized representation)

수에 대한 표현을 한 가지로 통일하기 위한 방법

± 0.1bbb...b × 2E

위의 예에서 정규화된 표현은 0.1101 × 25

비트 배열의 예 (0.1101 × 25)

부호(S) 비트 = 0

지수(E) = 00000101

가수(M) = 1101 0000 0000 0000 0000 000

소수점 아래 첫 번째 비트는 항상 1이므로, 저장할 필요가 없음 가수 23비트를 이용하여 소수점 아래 24 자리 수까지 표현 가능

바이어스된 지수 (biased exponent)

지수를 바이어스된 수(biased number)로 표현

사용 목적

0에 대한 표현에서 모든 비트들이 0이 되게 하여, 0-검사(zero-test)가 용이하게 하기 위함 0-검사가 정수에서와 같은 방법으로 가능

8-비트 바이어스된 지수값들

바이어스된 지수를 사용한 부동소수점 표현의 예

바이어스값 = 128일 때, N = - 13.625에 대한 부동소수점 표현

13.62510 = 1101.1012 = 0.1101101 × 24

부호(S) 비트 = 1 (-)

지수(E) = 00000100 + 10000000 = 10000100

(바이어스 128을 더한다)

가수(M) = 10110100000000000000000

(소수점 우측의 첫 번째 1은 제외)

부동소수점 수의 표현 범위

부동소수점 수의 표현 범위

0.5 × 2-128에서 (1 - 2-24) × 2127 사이의 양수들(대략 1.47 x 10-39 ~ 1.7 x 1038)

-(1 - 2-24) × 2127 에서 -0.5 × 2-128 사이의 음수들

제외되는 범위

(1 - 2-24) × 2127보다 작은 음수  음수 오버플로우(negative overflow)

0.5 × 2-128 보다 큰 음수  음수 언더플로우(negative underflow)

0

0.5 × 2-128 보다 작은 양수  양수 언더플로우(positive underflow)

(1 - 2-24) × 2127 보다 큰 양수 양수 오버플로우(positive overflow)

32-비트 데이터 형식의 표현 가능한 수의 범위

IEEE 754 표준 부동소수점 수의 형식

부동소수점 수의 표현 방식의 통일을 위하여 미국전기전자공학회(IEEE)에서 정의한 표준

표현 방법

N = (-1)S 2E-127 (1.M)

가수 : 부호화-크기 표현 사용

지수 필드 : 바이어스 127 사용

1.M × 2E의 형태를 가지며, 소수점 아래의 M 부분만 가수 필드에 저장(소수점 왼쪽의 표현되지 않는 1을 hidden bit라고 지칭)

64-비트 복수-정밀도 부동소수점 형식을 사용하는 경우

N = (-1)S 2E-1023 (1.M)

IEEE 754 표준 부동소수점 수의 형식

IEEE 754 표현 예 (N = - 13.625 )

13.62510 = 1101.1012 = 1.101101 × 23

부호(S) 비트 = 1 (-)

지수 E = 00000011 + 01111111 = 10000010

(바이어스 127을 더한다)

가수 M = 10110100000000000000000

(소수점 좌측의 1은 제외한다)

예외 경우를 포함한 IEEE 754 표준

예외 경우를 포함한 정의 (32-비트 형식)

만약 E = 255이고 M ≠ 0이면, N = NaN

만약 E = 255이고 M = 0이면, N = (-1)S ∞

만약 0 < E < 255 이면, N = (-1)S 2E-127 (1.M)

만약 E = 0이고 M ≠ 0이면, N = (-1)S 2-126 (0.M)

만약 E = 0이고 M = 0이면, N = (-1)S 0

예외 경우를 포함한 정의 (64-비트 형식)

만약 E = 2047이고 M ≠ 0이면, N = NaN

만약 E = 2047이고 M = 0이면, N = (-1)S ∞

만약 0 < E < 2047 이면, N = (-1)S 2E-1023 (1.M)

만약 E = 0이고 M ≠ 0이면, N = (-1)S 2-1022 (0.M)

만약 E = 0이고 M = 0이면, N = (-1)S 0

부동소수점 덧셈 / 뺄셈

덧셈과 뺄셈

지수들이 일치되도록 조정 (alignment)

가수들 간의 연산(더하기 혹은 빼기) 수행

결과를 정규화 (normalization)

부동소수점 산술의 파이프라이닝

단계 수만큼의 속도 향상

대규모의 부동소수점 계산을 처리하는 거의 모든 슈퍼컴퓨터들에서 채택

부동소수점 곱셈 / 나눗셈

2진수 부동소수점 곱셈 과정

가수들을 곱한다

지수들을 더한다

결과값을 정규화

2진수 부동소수점 나눗셈 과정

가수들을 나눈다

피젯수의 지수에서 젯수의 지수를 뺀다

결과값을 정규화

부동소수점 연산 과정에서 발생 가능한 문제들

지수 오버플로우(exponent overflow)

양의 지수값이 최대 지수값을 초과

수가 너무 커서 표현될 수 없는 상태이므로, +∞ 또는 -∞로 세트

지수 언더플로우(exponent underflow)

음의 지수값이 최대 지수값을 초과

수가 너무 작아서 표현될 수 없는 상태이므로, 0으로 세트

가수 언더플로우(mantissa underflow)

가수의 소수점 위치 조정 과정에서 비트들이 가수의 우측 편으로 넘치는 경우

 반올림(rounding) 적용

가수 오버플로우(mantissa overflow)

같은 부호를 가진 두 가수들을 덧셈하였을 때 올림수가 발생하는 경우

 재조정(realignment) 과정을 통하여 정규화

댓글