컴퓨터는 저장공간에 한계가 있기 때문에 특정 값보다 큰 숫자나 작은 숫자는 표현할 수 없다. 예를 들어, float는 32비트를 사용하는데 double은 64비트를 사용한다. 32비트를 사용하는 float의 경우에는 2^31 - 1(대략 20억)까지 저장할 수 있으며, 64비트를 사용하는 doblue의 경우에는 2^61-1까지 저장할 수 있다. 결국 컴퓨터가 저장할 수 있는 정보는 유한한다. 반대로 소숫점의 경우를 생각해보자. float x = 1 , float y = 10으로 두고 x / y를 나누면 소숫점 27번째 자리까지만 표현할 수 있고, 그 이상은 0으로 치환시켜 보여준다. 이는 컴퓨터는 계산할 수 있는 값들 중 1/10에 가장 가까운 값을 저장한 것이다. 왜냐하면 유한한 정보를 사용해서는 무한한 숫자들을 100% 정확하게 저장할 수 없기 때문이다.
내가 자주 사용하고 있는 JavaScript에서는 IEEE 754 기반으로 10진수 기반의 숫자를 0과 1로 대응하는 소수점을 처리한다. 이 언어에서도 마찬가지의 결과를 갖는다. 소숫점 27번째자리까지 정확하게 표현할 수 있고 그 이상 넘어가는 숫자에 대해서는 다른 값을 보여준다.
- 1e-27 => 1 / 10^27
- 1.0000000000000001e-28 => 1 / 10^28
반응형
'CS > 기타' 카테고리의 다른 글
[소프트웨어 아키텍처 101] 챕터 3. 모듈성 (1) | 2024.01.17 |
---|---|
[소프트웨어 아키텍처 101] 챕터 2. 아키텍처 사고 (0) | 2024.01.12 |
[소프트웨어 아키텍처 101] 챕터 1. 서론 (0) | 2024.01.12 |
[GIT] .gitignore가 작동하지 않을 때 대처 방법 (0) | 2023.06.23 |
[Network] 인터넷과 음성통화 그리고 웹 (0) | 2020.11.11 |
댓글