比方說,我們已經聲明瞭以下變量在C++中進行數學運算時,浮點錯誤是如何傳播的?
float a = 1.2291;
float b = 3.99;
float
變量具有精度6,這(如果我理解正確)表示數之間的差異,計算機實際存儲並且你想要的實際數量將小於10^-6
這意味着a
和b
都有一些誤差小於10^-6
所以電腦a
裏面實際上可能1.229100000012123
和b
可能是3.9900000191919
現在讓我們假設你有下面的代碼
float c = 0;
for(int i = 0; i < 1000; i++)
c += a + b;
我的問題是,
將c
的最終結果的精度誤差小於10^-6
作爲w還是不是?
如果答案是否定的,我們如何才能真正知道這個精度錯誤,以及如果您應用任何類型的操作(如您希望的次數和順序),究竟發生了什麼?
閱讀它,它會回答你所有的問題和更多:http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – avakar 2014-09-06 21:07:00
該文章似乎翔實,我會研究它,因爲浮動點錯誤讓我很頭痛,謝謝! – ksm001 2014-09-06 21:14:11
您對精度的定義不正確。六位十進制數字的精度意味着該數字將精確到許多數字,而不會超過其數量級別。 – EJP 2014-09-06 21:31:44