Поскольку ваша переменная суммы является целым числом, вы можете не получить ожидаемых результатов при суммировании элементов вашего вектора, которые не являются целыми числами.
Если ваши элементы имеют значение 0.999999999
, а не 1.00000
, тогдапечать их может быть округлена до 1.00000
, но при добавлении их в целое число значение будет усечено до 0.
Судя по предоставленному выводу, все ваши значения меньше, чем 1
, кроме последнегоодин, который больше или равен 1.
Существует 2 возможных решения:
- Измените тип
sum
на float
или double
. - Измените ваш расчет на:
sum += static_cast<int>(round( v[i] ));
Обратите внимание, что ваш компилятор, вероятно, предупреждал об усечении двойного до целого.Обратите внимание на предупреждения компилятора, они часто указывают на ошибку.