2012-12-20 39 views
0

以下代碼返回一個意外的(和錯誤的值)。Objective-C Ceil()不返回正確的值

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

它返回111不是110。據我所知,乘以1的數是沒有意義的,但那些1的並不總是那些。當它們是其他值時,該功能按預期工作。

回答

1

使用ceilf運營商的固定對我來說:

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是111

+0

啊真。任何建議如何解決這個問題? –

+0

1.1f正好(在IEEE 754中)是1.10000002384185791015625。 –

+0

@robmayoff好的 - 我只是舉個例子來說明問題。很高興知道。你記住了嗎?你知道多少個* pi *數字? :) – rmaddy