我想知道是否有一種方法可以解決精度問題,這似乎是由于我的機器內部使用浮點數表示的結果:為了清楚起見,問題總結為:// str is "4.600"; atof( str ) is 4.5999999999999996 double mw = atof( str ) // The variables used in the columns calculation below are: // // mw = 4.5999999999999996 // p = 0.2 // g = 0.2 // h = 1 (integer) int columns = (int) ( ( mw - ( h * 11 * p ) ) / ( ( h * 11 * p ) + g ) ) + 1;在轉換為整數類型之前,列計算的結果為1.9999999999999996;與2.0的預期結果相差甚遠。任何建議最歡迎。
3 回答
翻過高山走不出你
TA貢獻1875條經驗 獲得超3個贊
將浮點數舍入為整數的一種非常簡單有效的方法:
int rounded = (int)(f + 0.5);
注意:這僅在f始終為正時才有效。(感謝j隨機黑客)
心有法竹
TA貢獻1866條經驗 獲得超5個贊
當使用浮點算術時,嚴格相等幾乎是沒有意義的。您通常希望與可接受的范圍進行比較。
請注意,某些值不能完全表示為浮點值。
了解每位計算機科學家應該了解的有關浮點算法和比較浮點數的知識。
蠱毒傳說
TA貢獻1895條經驗 獲得超3個贊
沒有準確性問題。
您得到的結果(1.9999999999999996)與數學結果(2)相差1E-16。考慮到您輸入的“ 4.600”,這非常準確。
當然,您確實有一個舍入問題。C ++中的默認舍入是截斷。您想要類似于Kip解決方案的東西。詳細信息取決于您的確切域,您期望round(-x)== - round(x)嗎?
- 3 回答
- 0 關注
- 644 瀏覽
添加回答
舉報
0/150
提交
取消
