1. 부동소수점
소수점이 고정되어있지 않은 소수표현방식
지수와 가수
123.123이라는 수를 m x 10^n 꼴로 나타내면, 1.23123 x 10^2으로 표현가능
1. 지수 : 10^n에서 n에 해당
2. 가수 : 1.23123이 해당
2. IEEE 754
현대의 컴퓨터의 부동소수점 저장방식
![]() |
32비트, 64비트 시스템 모두 부호비트에 1비트가 사용된다. 부호비트가 0인 경우 양수, 1인 경우 음수를 의미한다.
32비트에서는 지수비트에 8비트, 가수비트에 23비트가 사용되고, 64비트에서는 지수비트에 11비트, 가수비트에 52비트가 사용된다.
IEEE 754에서는 가수의 형태가 1.OOO 형태로 정해져있다. 1101011.1010101의 경우 1.101011110101 x 2^6으로 저장되는 셈이다. 따라서, 가수는 101011110101이 되고, 나머지 비트는 0으로 채워진다.
지수는 바이어스라는 값이 더해져서 저장이 되는데, 바이어스는 2^(k-1) -1이고 k는 지수에 사용되는 비트 수를 의미한다. 32비트에서는 k가 8, 64비트에서는 k가 11이다. 1.101011110101 x 2^6에서 지수는 6 + 2^7 -1 이므로 133이다. 이제 133을 2진수로 변환하면 10000101이고, 결론적으로 지수는 10000101로 저장이 된다.
정리해보면, 32비트에서 1101011.1010101은 0100001011010111101010000..0이 된다.
3. 부동소수점 오차 발생
간혹 프로그래밍을 하다가 0.1 + 0.2 == 0.3 과 같은 소수점 비교연산을 할 때가 있다. 결과는 False인데 뭐가 잘못됐다는 것일까. 이는 부동소수점의 표현 방식과 관련이 있다.
0.1을 예시로 들어보면, IEEE 754 방식으로 표현하는 과정에서 0.1을 1.m x 2^n 형태로 변환해주어야 한다. 때문에 변환하는 과정에서 소수점이 무한하게 많이 필요해지는 상황이 발생한다.
하지만, 32비트 시스템에서는 지수비트에 8비트, 가수비트에 23비트가 사용이 되고 64비트 시스템에서는 지수비트에 11비트, 가수비트에 52비트가 사용이 된다. 다시말해, 유한한 비트 시스템을 활용하고 있기때문에 0.1을 1.m x 2^6 형태로 변환할 때 필요한 소수점을 보장해주지 못 한다. 보장해주지 못 하는 소수점은 생략하게 되고, 생략하는 과정에서 오차가 발생한다.
본 내용은 "이것이 취업을 위한 컴퓨터 과학이다 with CS 기술면접"을 토대로 작성된 내용입니다.
'컴퓨터 과학 > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] CPU의 성능을 높이는 방법 (1) | 2025.01.07 |
---|---|
[컴퓨터구조] 동기, 비동기 인터럽트 (0) | 2025.01.07 |
[컴퓨터구조] 레지스터의 정의와 종류 (0) | 2025.01.07 |
[컴퓨터구조] 다양한 인코딩 방식 (0) | 2025.01.06 |
[컴퓨터구조] CPU, 메모리, 보조기억장치, 입출력장치 (0) | 2025.01.06 |