CS/기타

[Computer Science] 하드웨어의 한계, JavaScript에서의 부동소수점

Joonfluence 2020. 11. 10. 10:02

 컴퓨터는 저장공간에 한계가 있기 때문에 특정 값보다 큰 숫자나 작은 숫자는 표현할 수 없다. 예를 들어, float32비트를 사용하는데 double64비트를 사용한다. 32비트를 사용하는 float의 경우에는 2^31 - 1(대략 20억)까지 저장할 수 있으며, 64비트를 사용하는 doblue의 경우에는 2^61-1까지 저장할 수 있다. 결국 컴퓨터가 저장할 수 있는 정보는 유한한다. 반대로 소숫점의 경우를 생각해보자. float x = 1 , float y = 10으로 두고 x / y를 나누면 소숫점 27번째 자리까지만 표현할 수 있고, 그 이상은 0으로 치환시켜 보여준다. 이는 컴퓨터는 계산할 수 있는 값들 중 1/10에 가장 가까운 값을 저장한 것이다. 왜냐하면 유한한 정보를 사용해서는 무한한 숫자들을 100% 정확하게 저장할 수 없기 때문이다

 

 

CS50 Sandbox

Temporary programming environments for students and teachers.

sandbox.cs50.io

 

 내가 자주 사용하고 있는 JavaScript에서는 IEEE 754 기반으로 10진수 기반의 숫자를 0과 1로 대응하는 소수점을 처리한다. 이 언어에서도 마찬가지의 결과를 갖는다. 소숫점 27번째자리까지 정확하게 표현할 수 있고 그 이상 넘어가는 숫자에 대해서는 다른 값을 보여준다.

  • 1e-27 => 1 / 10^27 
  • 1.0000000000000001e-28 => 1 / 10^28

 

 

 

반응형