2011-12-22 2 views
-1

가능한 중복 :!
Why can't decimal numbers be represented exactly in binary?왜 0.1 * 3 = 0.3

내가 this 질문을 읽고 (공산당 오리의 대답에) 의견이 발견되었다. 내가 내 마음을 잃지 않았 음을 확인한 후에 나는 호기심을 느낀다.

왜 0.1 * 3! = 0.3입니까?

(참고, 문제는 게임 개발에 관한 한 수학 분야되는 게임 개발자는 잘 알고 있어야합니다)

+0

여러 중복, SO 질문에서 부동 소수점 검색 – sdcvvc

답변

3

THER 이유는 2의 거듭 제곱 만 숫자는 단순한 바이너리 표현으로 정확하게 표현 될 수 있다는 것입니다 .

진수의 각 자릿수 (2)의 다른 힘이고 임의의 수, 따라서 (2)의 전력에 대응하지 않는 2

0.1 다른 힘의 합이며 다른에서 표현 될 수 없다 2의 거듭 제곱입니다. 따라서 특정 오류 만 표시 할 수 있습니다. 좀 더 정교한 설명과 예제를 찾을 수 있습니다. here

정확한 숫자가 필요한 경우 대부분 정수를 사용해야합니다. 나는 다른 언어에 대해서는 확신 할 수 없지만, 자바에서는 재무 계산과 같이 정밀도가 필수적인 애플리케이션에 대해이 문제를 정확히 극복하도록 설계된 여러 클래스가 있습니다. 가장 눈에 띄는 것은 BigIntegerBigDecimal

1

입니다. 이것은 컴퓨터가 부동 소수점을 저장하는 방식입니다. IEEE 754이 원인입니다.

이 표현으로 0.1은 96 비트 플로트로 정확하게 표현 될 수 없습니다. 0.3은 그다지 중요하지 않지만 0.1이 정확히 표현 될 수 없기 때문에 3을 곱하면 0.3을 정확하게 산출 할 수 없다는 것을 의미합니다.

관련 문제