2014-02-19 2 views
1

매우 기본적인 계산을 수행하고 if.. statement의 이중 값을 비교할 때 이상한 결과를 얻습니다. 첨부 된 스크린 샷을 참조하십시오. 이상한 결과를 얻으려면 double 값 비교 iOS

나는 빨간색 마커로 변수 값을 표시했습니다. 변수 totalSliceValue의 값이 100이고 값을 100.0과 비교했을 때 TRUE을 반환하지만 100이 100보다 크지 않다는 것을 알 수 있습니다.

아무에게도 이것을 설명 할 수 있습니까? 내 코드에 버그가 있거나 컴파일러에 문제가 있습니다.

미리 감사드립니다.

+0

정말 '100.0000001'과 같은 값이 아닌가요? 이것을보십시오 :'NSLog (@ "totalSliceValue = % .8f", totalSliceValue); – rmaddy

+0

@rmaddy : .8f로 시도하고 '100.00000000'이되었습니다. –

+0

맞습니다. .16f로 시도하고 값을 인쇄하면 100.0000000000000142가됩니다. –

답변

1

두 배일 때 100은 종종 100보다 큽니다. 그것은 실제로 100.000000000127832645 또는 이와 비슷한 것입니다.

What Every Computer Scientist Should Know About Floating-Point Arithmetic

Another of many articles on the problem developers face when working with floats and doubles.

해결 방법 : 다른 하나 개를 두 번을 빼고 결과가 당신은 그들이 동일하지 않는 것이, 그들에게 동등한 취급 할 수 있도록 작은 있는지 확인합니다.

One duplicate StackOverflow question

Another duplicate

문제는 컴파일러하지만 당신이 그것을 지시하는 방법을 정말 아니다 - 그것은 IEEE 부동 소수점에 대한 규칙에 따라 일하고있다.

+0

올바른 .16f 시도하고 값을 인쇄 할 때 100.0000000000000142 수 있습니다. –