在C++編程中,我什麼時候需要擔心精度問題?舉一個小例子(它可能不是雖然是完美的一個),計算機精度:我應該什麼時候擔心它?
std::vector<double> first (50000, 0.0);
std::vector<double> second (first);
難道是可能的,second[619] = 0.000000000000000000000000000
(我的意思是一個很小的值)。或者SUM = second[0]+second[1]+...+second[49999] => 1e-31
?或SUM = second[0]-second[1]-...-second[49999] => -7.987654321e-12
?
我的問題:
- 難道是一些小的干擾與
double
型數字打交道? - 什麼可能導致這些小干擾?即舍入誤差變大?你能列出他們嗎?如何採取預防措施?
- 如果在某些操作中可能會有小的干擾,那麼是否意味着在這些操作之後,使用
if (SUM == 0)
是危險?那麼應該總是使用if (SUM < SMALL)
來替代,其中SMALL
被定義爲非常小的值,例如1E-30
? - 最後,小干擾可能導致負值嗎?因爲如果可能的話,我應該更好地使用
if (abs(SUM) < SMALL)
來代替。
任何經驗?