1
我想爲雙精度值實現一個簡單的解析器(只是爲了好玩)。然而,我注意到,當處理小數點位移時,當乘以10的冪時,我得到了舍入誤差。手動解析雙精度時避免舍入誤差
我想知道double.Parse
如何確保結果值儘可能接近字符串值?
只是一個例子: 當解析0.0124(= 124 * 0.0001)時,我得到0.012400000000000001。但是,double.Parse
按預期顯示0.0124。
我想爲雙精度值實現一個簡單的解析器(只是爲了好玩)。然而,我注意到,當處理小數點位移時,當乘以10的冪時,我得到了舍入誤差。手動解析雙精度時避免舍入誤差
我想知道double.Parse
如何確保結果值儘可能接近字符串值?
只是一個例子: 當解析0.0124(= 124 * 0.0001)時,我得到0.012400000000000001。但是,double.Parse
按預期顯示0.0124。
該解決方案看起來很簡單: 只是不乘以小於1的值(例如上例中的0.0001),而是除以1/x(在上例中爲10000)。
我認爲原因很簡單,整數值有一個確切的表示形式(高達2^53),所以商沒有舍入誤差(因爲存在因子< 1)。
我希望你認識到,在這兩種情況下,它不等於0.0124,但這是一個很好的問題來理解A.什麼是由「double.Parse」和B分析的「真實」價值是什麼 – Amit
當然。 double值以二進制格式存儲。所以很多十進制數字沒有確切的表示。 – LionAM