2012-12-20 3 views
0

다음 코드는 예기치 않은 값 (및 잘못된 값)을 반환합니다. 그것은 111 없습니다 (110)를 반환Objective-C Ceil()이 올바른 값을 반환하지 않음

x1 = ceil(ceil(ceil(100*1.0f)*1.0f)*1.1f); 

나는 1의 숫자를 곱하는 것은 무의미 것을 알고 있지만, 그 일의의는 항상 사람이 아니다. 다른 값일 때 함수는 예상대로 작동합니다.

답변

1

입니다 :

float x1 = ceilf(ceilf(ceilf(100*1.0f)*1.0f)*1.1f); 
NSLog(@"%f",x1); // 110 
+0

완벽. 감사 –

1

이것은 부동 소수점 오류의 문제입니다. 1.1f는 아마도 실제로 1.100056778과 비슷할 것입니다.

즉, 100 * 1.100056778 = 110.0056778을 의미합니다. 그리고 그 숫자의 ceil은 나를 위해 그것을 고정 ceilf 연산자를 사용하여 111

+0

아 참. 이 문제를 해결하는 방법은 무엇입니까? –

+0

1.1f는 정확히 1.10000002384185791015625 (IEEE 754에서)입니다. –

+0

@robmayoff OK - 그냥 한 가지 예를 들고 있습니다. 알아 둘만한. 암기 된 적이 있습니까? * pi *의 몇 자릿수를 알고 있습니까? :) – rmaddy

관련 문제