부동 소수점 사용자는 반올림 오류를주의해야합니다. 예를 들어, 1.0/3*3 == 1
은 거의 모든 현대 프로그래밍 언어에서 false로 평가됩니다. 더 특별하게 nonspecialists를 위해, 의외로 1.0/10*10 == 1
.부동 소수점과 반올림 오류 방지
그러나 이러한 문제를 해결할 수있는 부동 소수점 시스템이 있습니다. 특히 Apple II와 Commodore Vic-20의 에뮬레이터에서 위의 두 가지 테스트를 모두 시도했으며 각각의 표현은 각 경우에 true로 평가되었습니다. 반 직관적입니다 : 매우 원시적 인 시스템은 훨씬 더 진보 된 시스템보다 잘 작동하는 것 같습니다.
위의 테스트에서 이전 부동 소수점 시스템이 원하는 대답을 얻었습니까? 현대의 IEEE 부동 소수점이 다른 이유를 가지고 있다고 가정하면 교환으로 무엇을 얻을 수 있습니까? 또는 다른 말로하면 가장 까다로운 종류의 반올림 오류없이 1/10과 1/3을 나타낼 수 있었지만 이전 부동 소수점 시스템을 포기한 문제는 무엇입니까?
편집 : Simon Byrne은 위에 나열된 정확한 테스트를 올바르게 지적합니다. 실제로 IEEE 부동 소수점을 전달합니다. 나는 그것들과 어떤 실수를했는지, 그것을 재현 할 수 없다는 것을 전혀 모른다. 그러나 여기에 실패 하나는 지금 파이썬에서 시도의 : 정확한 시험 방법을 기존 시스템이 그 결과를 얻을 수 없었기 때문에 다시 애플 II에 성공하고, 트레이드 오프는 무엇 이었습니까
>>> 0.1+0.1+0.1 == 0.3
False
인가?
기록 부분에 응답 할 수는 없지만 번호를 부동으로 저장할 수 있습니다. Clojure는 불합리한 수를 대신 분수로 저장하는 "분수"클래스를 가지고 있으므로 절대적으로 필요 할 때까지 반올림하지 않습니다. – Carcigenicate
@Carcigenicate 오른쪽이지만, 분수로 숫자를 저장하는 것은 유용하게 예측할 수 있다면 임의의 정밀도로 수행해야합니다. 따라서 CPU 및 메모리 요구로 이어 지므로 대부분의 경우 부동 소수점을 사용합니다. – rwallace
사용중인 언어/플랫폼은 무엇입니까? 요즘 꽤 유비쿼터스 인 IEEE754 binary64를 사용하는 모든 언어/플랫폼에서'1.0/3 * 3 == 1'과 '1.0/10 * 10 == 1'이 모두 true이어야합니다. –