JavaScript 에서 if문 응용문제를 풀던 중
50000 * 1.1 은 소수점이 생기는 오류가 나고,
50000 + (50000 * 0.1) 은 정상적으로 계산되는 현상을 발견했다.
강사님께 질문했더니 모든 프로그램은 이런 오류가 나는데 일단은 그렇게 알고 있으라고 하셨다.
아마도 이 오류를 이해하려면 기본적인 프로그래밍 지식을 더 쌓아야 하는 거 같았다.
그래도 궁금해서 인터넷을 조금 찾아봤다.
1. 컴퓨터로 숫자를 표현할 때 한계가 있다.
2. 10 진수를 2 진수로 바꿀 때 무한 소수가 생기는 현상이 있다.
3. 무한수를 유한수로 표현하려다 보니 초과되거나 손실되는 값이 있어 계산 오류가 난다.
이를 해결하려면 toFixed(), Math 객체 메서드, 라이브러리 사용 등의 방법이 있다.
아직은 조금밖에 이해되지 않지만 또 다른 궁금증이 생겼다.
은행처럼 단위가 큰 숫자를 사용하기도 하고, 소수점 밑의 자리를 여러 개 사용하기도 하는 곳에서는 신뢰성이 중요할 텐데 과연 이 문제를 어떤 방법으로 해결하는지 궁금해졌다.
결론: 프로그램들이 가지고 있는 소수점 계산 오류는 여러 가지 방법들로 보완이 가능하다. 하지만 100% 신뢰성을 얻으려면 소수점 자체를 사용하지 않아야 한다.
이 외에도 숫자를 문자열로 저장하면 무한하게 큰 숫자도 저장 가능하다는 걸 알게 되었고, 이와 관련된 라이브러리 다운로드 사이트가 있다는 걸 알았다.
https://www.npmjs.com/package/big-integer
big-integer
An arbitrary length integer library for Javascript. Latest version: 1.6.51, last published: 9 months ago. Start using big-integer in your project by running `npm i big-integer`. There are 1090 other projects in the npm registry using big-integer.
www.npmjs.com
'궁금해' 카테고리의 다른 글
QueryBox communications link failure 오류 (1) | 2022.09.20 |
---|---|
피보나치 수열 (0) | 2022.09.07 |
JavaScript Use strict란? (0) | 2022.09.06 |
화이트박스 테스트, 블랙박스 테스트 (0) | 2022.09.05 |
자손 선택자와 span (0) | 2022.08.20 |