자바스크립트뿐만 아니라 Java, C언어 등의 다른 언어들에서도 위와 유사한 계산 오류가 발생한다.
컴퓨터가 램에 숫자를 저장할때는 기본적으로
8개의 칸(8bit === 1byte)에 0과 1로 이루어진 2진법으로 저장하게 된다.
그러나 몇몇 소수(ex: 0.1)는 10진법에서 2진법으로 변환하는 과정에서 무한 소수가 되어버린다.
저장공간의 한계가 있는 컴퓨터는 무한 소수를 유한 소수로 인식하게끔 일정 단위 이상 넘어가는 숫자들은 제거하게 되고 여기서 미세한 오차가 발생한다.
정밀도를 위해서는 이른바 칸이라는 것을 늘려주고 싶다면 float(32bit)나 double(64bit)을 사용해 늘려주거나,
와 같이 나타낼 수도 있고, Math객체를 이용한 적절한 반올림을 통해 계산을 할 수도 있다.
애플코딩 유튜브 강좌를 보니 미군의 패트리어트가 위와 비슷한 사유로 인해 시간계산의 오차가 나서 적의 미사일을 요격하지 못해 28명의 전사자가 발생하였다는데, 군대에서 유도탄특기로 4년을 복무한지라 더 와닿았던 것 같다.
아무튼 면접에서 관련질문 나올 시 약간이라도 아는 척을 할 수 있게 되었다.