프로그래밍 공부하다가
10진법에서 끝자리가 5가 아닌 소수는
2진법으로 변환될 때 무한소수가 되기 때문에
무한소수를 일정 소숫점 자리에서 끊어버리는 컴퓨터는
0.1+1.1 ≠ 1.2로 판단한다는 사실을 알았는데
⅓은 10진법에서 0.333...이고
⅓ × 3을 하면 1이지만, 10진법 소수로 보면 0.999...이잖음?
⅓이 0.333...이라는 무한소수로 표기되는게 혹시 진법이랑 관련이 있는 걸까?
다른 진법으로 봤을 때 ⅓은 유한소수라서 3을 곱하면 1이 되는게 맞지만
우리가 10진법으로 보니깐 이런 이상한 현상이 일어나나 싶어서 질문함.
분수의 분모가 k의 약수들의 곱으로만 이루어져야만 그 분수는 k진법 유한소수로 나타내어짐. 예를 들어 십진법에서 1/3은 0.333...으로 무한소수가 되고 3진법에서 1/3 (3진법 표기로는 1/10)은 0.1이 되어 유한소수가 됨.
0.999…이라는 표기가 10진법인 건 맞지만, 10진법이기 때문에 0.999…=1이냐는 건 이상한 질문. 마치 1+1인 2인 이유가 10진법 때문이냐고 묻는 것과 마찬가지. 분수의 서수 표기가 유한소수가 되는지는 진법에 의존하는 성질이지만, 표기가 다른 두 수가 같은지 다른지는 두 수 자체의 성질이지 진법과는 상관 없음.
컴퓨터에서 무한소수를 유효숫자 처리하는 것과 전혀 관계없다. 그 어떤 것과 아무 관계 없이 " 0.999... = 1 " 이 자체가 그냥 진리. 대부분의 인간의 직관으로는 바로 납득하기 어려울수 있지만 자신이 이해가 안 간다고 거짓이 아님. 그냥 진리 그 자체임.
내 이야기 컴퓨터 이야기의 포인트는 컴퓨터가 무한소수를 유한소수로 바꾼다는게 아님. 마지막 자리가 5가 아닌 10진법 소수는 10진법에서 2진법으로 바뀔 때 무한소수가 된다는게 포인트지. 컴퓨터가 2진법 때문에 1.1+0.1=1.2를 거짓으로 판단하는 것처럼 수학을 잘 모르는 사람들이 ⅓×3=1은 인정하면서 0.333...×3=0.999...≠1로 판단하는게 혹시 진법의 문제인가 싶어서 하는 질문임. 내 질문은 "10진법으로 표기된 무한소수 0.333...이 다른 진법으로 바뀌면 유한소수가 되느냐?" 와 "이렇게 다른 진법으로 나타낸 ⅓에 3을 곱하면 0.999...가 아닌 1이 되냐는거임." 처음 댓글 단 고닉이 대답 잘해주긴 했지만.
순환소수 계산하는거 중학교때도 배우고 고등학교때 급수로도 배우는건데 이갤에 각색짐승들 다보이네
컴퓨터에 오류생김 ? 심각한 결함인데 ?
ㅇㅇ 실제로 오류 생김. 그래서 정확한 계산을 하려면 프로그램이 소수연산을 안하게끔 입력값을 정수로 만들어줘야함. 예를들어 0.1초를 입력값으로 받으면 그걸 100ms로 바꾼 다음 연산을 해야함.
이거 숄체가 틀렸다고 한거자나