Se por estabilidade numérica você quer dizer precisão, sim, você pode acabar com problemas de precisão. Dependendo da proporção do maior para o menor, e de seus requisitos de precisão no resultado, isso pode ou não ser um problema.
Se você deseja ter alta precisão, considere o somatório de Kahan - isso usa um flutuador extra para compensação de erro. Também há somas aos pares .
Para uma análise detalhada da troca entre precisão e tempo, consulte este artigo .
ATUALIZAÇÃO para C ++ 17:
Algumas das outras respostas mencionam std::accumulate
. Desde o C ++ 17, existem políticas de execução que permitem que os algoritmos sejam paralelizados.
Por exemplo
#include <vector>
#include <execution>
#include <iostream>
#include <numeric>
int main()
{
std::vector<double> input{0.1, 0.9, 0.2, 0.8, 0.3, 0.7, 0.4, 0.6, 0.5};
double reduceResult = std::reduce(std::execution::par, std::begin(input), std::end(input));
std:: cout << "reduceResult " << reduceResult << '\n';
}
Isso deve tornar a soma de conjuntos de dados grandes mais rápida, com o custo de erros de arredondamento não determinísticos (suponho que o usuário não consiga determinar o particionamento do encadeamento).