가능한 중복 :!
Why can't decimal numbers be represented exactly in binary?왜 0.1 * 3 = 0.3
내가 this 질문을 읽고 (공산당 오리의 대답에) 의견이 발견되었다. 내가 내 마음을 잃지 않았 음을 확인한 후에 나는 호기심을 느낀다.
왜 0.1 * 3! = 0.3입니까?
(참고, 문제는 게임 개발에 관한 한 수학 분야되는 게임 개발자는 잘 알고 있어야합니다)
가능한 중복 :!
Why can't decimal numbers be represented exactly in binary?왜 0.1 * 3 = 0.3
내가 this 질문을 읽고 (공산당 오리의 대답에) 의견이 발견되었다. 내가 내 마음을 잃지 않았 음을 확인한 후에 나는 호기심을 느낀다.
왜 0.1 * 3! = 0.3입니까?
(참고, 문제는 게임 개발에 관한 한 수학 분야되는 게임 개발자는 잘 알고 있어야합니다)
THER 이유는 2의 거듭 제곱 만 숫자는 단순한 바이너리 표현으로 정확하게 표현 될 수 있다는 것입니다 .
진수의 각 자릿수 (2)의 다른 힘이고 임의의 수, 따라서 (2)의 전력에 대응하지 않는 2
0.1
다른 힘의 합이며 다른에서 표현 될 수 없다 2의 거듭 제곱입니다. 따라서 특정 오류 만 표시 할 수 있습니다. 좀 더 정교한 설명과 예제를 찾을 수 있습니다. here
정확한 숫자가 필요한 경우 대부분 정수를 사용해야합니다. 나는 다른 언어에 대해서는 확신 할 수 없지만, 자바에서는 재무 계산과 같이 정밀도가 필수적인 애플리케이션에 대해이 문제를 정확히 극복하도록 설계된 여러 클래스가 있습니다. 가장 눈에 띄는 것은 BigInteger과 BigDecimal
입니다. 이것은 컴퓨터가 부동 소수점을 저장하는 방식입니다. IEEE 754이 원인입니다.
이 표현으로 0.1은 96 비트 플로트로 정확하게 표현 될 수 없습니다. 0.3은 그다지 중요하지 않지만 0.1이 정확히 표현 될 수 없기 때문에 3을 곱하면 0.3을 정확하게 산출 할 수 없다는 것을 의미합니다.
여러 중복, SO 질문에서 부동 소수점 검색 – sdcvvc