我需要找到浮點數的模數。使用fmodf獲取模數的問題
對於這一點,我使用
NSLog(@"value >> %f",fmodf(2.0f, 0.1f));
這個輸出應該是0.0F
但我正在逐漸產值>> 0.1
如何?
我需要找到浮點數的模數。使用fmodf獲取模數的問題
對於這一點,我使用
NSLog(@"value >> %f",fmodf(2.0f, 0.1f));
這個輸出應該是0.0F
但我正在逐漸產值>> 0.1
如何?
編譯器將源文本0.1f
轉換爲最接近的可表示值。 IEEE-754 32位浮點值(iOS使用的)最接近.1是0.100000001490116119384765625。
您使用參數2和0.100000001490116119384765625評估fmodf
。從2減去19的後一個值後,殘差爲0.099999971687793731689453125,所以這是返回的值。當四捨五入爲幾位數字顯示時,結果爲「0.1」。
但根據常識這是錯誤的。 :)有關我們如何才能實現正確結果的任何解決方案? – mayuur 2013-03-16 12:43:18
@mayuur:您需要爲您正在嘗試解決的問題提供背景。爲什麼你想找到一個殘留物?請注意,'fmodf'已經返回了正確的結果;它返回給定參數的確切數學操作數。你給了它不準確的論據。在某些情況下,您可以通過縮放您的值來爲其提供準確的參數(例如,爲整數),因此不會出現舍入誤差。在其他情況下,您設計接受舍入錯誤。 – 2013-03-16 12:55:50
0.1不能完全用浮點數表示。 – 2013-03-16 08:13:43
另請參閱:http://stackoverflow.com/questions/15446902/ios-rounding-a-float-with-roundf-is-not-working-properly – 2013-03-16 08:18:09