이번 글을 보는 사람들은 이미
0.1 + 0.2의 결과를 보고
당황스러움을 경험했을듯 싶다.
눈을 의심해봤자 소용없다.
컴퓨터는 0.1 + 0.2를 계산하지못한다는걸 받아들이자.
조금더 정확하게 얘기하면
2진수는 10진수 0.1을 정확하게 변경 할 수 없게끔 만들어졌다.
이유는 다음과 같다.
우선, 몸풀기로 10진수 정수를 2진수로 변환해보면
5(10) -> 101(2) = 2^2 + 2^0 이다.
그럼 소수를 다뤄보자
0.5(10)을 2진수로 변경하면 0.1(2)이 된다.
뒤에 0.1은 2^-1 이다.
그러므로 0.01(2) -> 2^-2 -> 0.25 이다.
반면에 0.1(10)은 0.0001100110011... (2) 이다.
(1/3을 십진수로 표시못하는 이유와 비슷하다)
즉 소수부분이 순환소수가 아니라 딱 떨어지는 수가 되려면
An = 1/2n 으로 표현되는 수들의 합으로 이루어지는 수가 되어야하고
그렇지 않는 수들은 전부 반올림이 필요한 소수가 된다.
결론적으로
소수 연산이 필요하다면 우선 정수로 변환을 해서 계산을하고
소수로 변경해줘야 할 듯 싶다.
댓글
댓글 쓰기