В программировании на С ++, когда мне нужно беспокоиться о проблеме точности? Для того, чтобы взять небольшой пример (он не может быть совершенным, хотя),Компьютерная точность: когда мне нужно беспокоиться об этом?
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)
.
Любые впечатления?