유튜브영상 : 개발자 라라
영상에서 필요한 부분만 발췌한 포스팅으로, 자세한 내용은 유튜브영상을 참고 바랍니다
0.1 x 0.1
처럼 우리가 멀쩡한 유한소수점끼리 연산을 하더라도 컴퓨터는 정확히 연산하지 못합니다
왜 그런걸까요?
핵심은
숫자를 다룰 때, 우리는 10진법을 사용하지만 컴퓨터는 2진법을 사용한다는 것
그리고, 10진법에서 유한소수인 수가 2진법에서는 무한소수일 수 있다는 점입니다
대표적인 예가 10진수 0.1 입니다
1/10 이라는 소수의 분모에 어떤 수를 곱하더라도 2의 제곱수를 만들 수 없으므로
10진법 유한소수 0.1은, 2진법에서는 무한소수입니다
컴퓨터가 무한소수를 전부 저장할 순 없으므로 정해진 bit수만큼만 저장하고 나머지는 반올림 후 버리게 됩니다
이로 인해, 우리가 10진법으로 유한소수를 다루더라도 컴퓨터는 정확히 연산할 수 없습니다
단, 오해하지 말아야 할 점은 0.1을 출력하면 그대로 0.1이 나오게 되는데
이는 어떤 방법으로 정확하도록 개선했다기보단 반올림 결과가 우연히 원본과 맞아떨어졌을 가능성이 높습니다
표현 자릿수를 늘리면 오차가 발견됩니다
10진수 연산을 소프트웨어적으로 직접 구현하는 방법..이 있겠습니다