1. 실수 표현 방식
컴퓨터는 0과 1로 이루어졌다는 이야기를 많이 들어봤을 것이다.
실제로 컴퓨터는 0과 1로 이루어진 비트로 연산을 수행하고 저장할 수 있기 때문에
실수도 이진수로 표현해야만 한다.
하지만 정수에 비해 실수를 이진수로 표현하려면 굉장히 복잡하기 때문에
이를 해결하기 위하여 고정 소수점과 부동 소수점 방식을 사용하고 있다.
2. 고정 소수점
<부호(1비트) + 정수부(15비트) + 소수부(16비트)>
구조를 보면 정수부와 소수부의 비트가 적기 때문에 연산속도가 굉장히
빠르고 메모리 사용량이 적다. 하지만 그만큼 표현할 수 있는 수의 범위가
굉장히 좁고 정밀하지 않다.
이를 해결하기 위해 정수부의 비트를 늘려버리면 큰 수는 표현할 수 있지만
소수부의 비트가 줄어들어 정밀한 표현이 불가능하고 소수부의 비트를
늘려버리면 정밀한 표현이 가능하지만 큰 수를 표현할 수없다.
따라서 고정 소수점은 정밀도가 필요하지 않고 빠른 계산이 필요한
임베디드 시스템이나 신호 처리와 같은 응용 분야에서 중요하다.
3. 부동 소수점
단정밀도(Single Precision)
<부호(1비트) + 지수부(8비트) + 가수부(23비트)>
단정밀도는 비트가 적은 대신 계산 속도가 빠르고 메모리를 적게 사용한다.
하지만 정밀도가 낮고 큰 숫자나 작은 숫자에 대해서 오차가 발생할 수 있다.
배정밀도(Double Precision)
<부호(1비트) + 지수부(11비트) + 가수부(52비트)>
배정밀도는 비트가 많은 대신 계산 속도가 느리고 메모리를 많이 사용한다.
하지만 정밀도가 높고 더 큰 숫자를 표현할 수 있다.
부동소수점은 ±(1.가수부) * 2^지수부-127의 수식을 사용하기 때문에
고정 소수점보다 매우 큰 실수를 표현할 수 있다.
부동 소수점은 고정 소수점보다 실수의 훨씬 넓은 범위를 표현할 수 있다는
장점이 있지만 항상 오차가 존재한다는 단점이 존재한다.
오차가 존재하는 이유는 가수와 지수를 사용하여 수를 표현하는 식을 사용하면
유효 자릿수가 한정되어 있기 때문이다.
이는 매우 작은 수나 큰 수를 표현할 때 일정 이상의 자릿수를
저장할 수 없어 연산 결과에 오차가 발생한다.
다른 이유로는 부동 소수점의 정규화 과정에서 발생하는 반올림으로 인한 오차,
10진수로는 정확히 표현할 수 있는 소수가 이진수에서는 무한 소수가 되는 경우 등이 있다.
'간단한 IT 지식' 카테고리의 다른 글
[오늘의 지식] 가비지 컬렉터(Garbage Collector) (0) | 2024.03.07 |
---|---|
[오늘의 지식] C# 제네릭 컬렉션 (1) | 2024.03.05 |
[오늘의 지식] OOP (Object-Oriented Programming) (0) | 2024.02.29 |
[오늘의 지식] 바이트 정렬 (2) | 2024.02.28 |
[오늘의 지식] 전략 패턴 (1) | 2024.02.27 |