2013-03-16 50 views
0

我需要找到浮點數的模數。使用fmodf獲取模數的問題

對於這一點,我使用

NSLog(@"value >> %f",fmodf(2.0f, 0.1f)); 

這個輸出應該是0.0F

但我正在逐漸產值>> 0.1

如何?

+0

0.1不能完全用浮點數表示。 – 2013-03-16 08:13:43

+0

另請參閱:http://stackoverflow.com/questions/15446902/ios-rounding-a-float-with-roundf-is-not-working-properly – 2013-03-16 08:18:09

回答

4

編譯器將源文本0.1f轉換爲最接近的可表示值。 IEEE-754 32位浮點值(iOS使用的)最接近.1是0.100000001490116119384765625。

您使用參數2和0.100000001490116119384765625評估fmodf。從2減去19的後一個值後,殘差爲0.099999971687793731689453125,所以這是返回的值。當四捨五入爲幾位數字顯示時,結果爲「0.1」。

+0

但根據常識這是錯誤的。 :)有關我們如何才能實現正確結果的任何解決方案? – mayuur 2013-03-16 12:43:18

+2

@mayuur:您需要爲您正在嘗試解決的問題提供背景。爲什麼你想找到一個殘留物?請注意,'fmodf'已經返回了正確的結果;它返回給定參數的確切數學操作數。你給了它不準確的論據。在某些情況下,您可以通過縮放您的值來爲其提供準確的參數(例如,爲整數),因此不會出現舍入誤差。在其他情況下,您設計接受舍入錯誤。 – 2013-03-16 12:55:50