수치 적 안정성으로 정확성을 의미한다면, 정확도 문제가 생길 수 있습니다. 가장 큰 값과 가장 작은 값의 비율 및 결과의 정확성에 대한 요구 사항에 따라 문제가 될 수도 있고 아닐 수도 있습니다.
높은 정확도를 원한다면 Kahan summation 을 고려하십시오 -오류 보상을 위해 여분의 부동 소수점을 사용합니다. 또한이 페어의 합은 .
정확도와 시간 간의 트레이드 오프에 대한 자세한 분석은 이 기사를 참조 하십시오 .
C ++ 17 업데이트 :
다른 답변 중 일부는 언급했다 std::accumulate
. C ++ 17부터 알고리즘을 병렬화 할 수 있는 실행 정책 이 있습니다.
예를 들어
#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';
}
결정적이지 않은 반올림 오류로 인해 큰 데이터 세트를 더 빠르게 합산해야합니다 (사용자가 스레드 분할을 결정할 수 없다고 가정합니다).