在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)
来代替。
任何经验?