부동소수점은 컴퓨터에서 실수를 표현하고 연산하기 위해 사용하는 방법이다. 정수는 소수점 없이 정확히 표현할 수 있지만, 실수는 소수점 아래 많은 자릿수를 가지며 매우 크거나 매우 작은 값을 포함할 수 있다.
C언어에서 부동소수점은 주로 float와 double형으로 표현된다. float형은 단정도 부동소수점 방식으로, 32비트를 사용해 숫자를 저장한다. 이는 소수점 이하 약 7자리 정도를 표현 할 수 있으며, 크기가 작은 실수를 다룰 때 유용하다.
부동소수점에는 한 가지 중요한 특징이 있다. 그것은 숫자를 근사값으로 표현한다는 것이다. 컴퓨터는 유한한 메모리를 사용하기 때문에 실수의 모든 자릿수를 정확히 표현할 수 없다. 이 때문에 오차가 발생할 수 있다.
부동소수점의 구조는 세 가지로 이루어져 있다. 부호(sign), 가수(mantissa), 지수(exponent)이다. 부호는 양수와 음수를 구분하며, 가수는 실제 숫자의 주요 부분을 담고, 지수는 해당 숫자의 위치나 크기를 결정한다. 설명만 해서는 모르니까 예시를 들어서 설명해보겠다.
-3.5이라는 숫자를 2진수로 변경해보자.
- 1. 절대값을 이진수로 표현 : 3은 11으로, 0.5는 0.1로 변환하며 11.1이 된다.
- 2. 정규화 1.xxx * 2^n 형태로 만든다. 1.11 x 2^1이 되서 n부분이 지수, 즉 1이된다.
- 3. IEEE 754 단정도 형식에서는 지수를 바이어스 127을 적용하여 저장한다. 1 + 127 = 128, 128을 이진수로 변환하면 10000000이 된다.
- 가수 부분 결정 : 가수 부분은 소수점 부분(1.11에서 11)을 사용하고 23비트를 맞추기 위해 뒤에 0을 채운다. 따라서 11000000000000000000000이 된다.
결과
- 부호비트 : 1
- 지수 비트 : 10000000
- 가수 비트 : 11000000000000000000000
- 이를 합치면, 1 10000000 11000000000000000000000가 된다.
바이어스(Bias)란?
IEEE 754 표준에서 사용하는 바이어스는 지수를 저장할 때 사용되는 방식이다.
단정도 방식에서는 127(01111111)을 더한다. 배정도 방식은 1023(1111111111)을 더한다.
728x90
'CS' 카테고리의 다른 글
OSAL(Operating System Abstraction Layer)란? (0) | 2024.11.05 |
---|---|
프리패칭(Prefetching)이란? (0) | 2024.11.04 |
루프 언롤링(Loop Unrolling)이란? (0) | 2024.10.23 |
2의 보수(Two's complement)란? (0) | 2024.10.23 |
ISO 파일이란? (1) | 2024.10.14 |