หากความเสถียรของตัวเลขคุณหมายถึงความถูกต้องใช่คุณอาจพบปัญหาความแม่นยำ ขึ้นอยู่กับอัตราส่วนของค่าที่มากที่สุดต่อค่าที่น้อยที่สุดและข้อกำหนดของคุณเพื่อความถูกต้องแม่นยำในผลลัพธ์อาจมีหรือไม่มีปัญหาก็ได้
หากคุณต้องการมีความแม่นยำสูงให้พิจารณาผลรวมของ Kahanซึ่งจะใช้การลอยแบบพิเศษเพื่อชดเชยข้อผิดพลาด นอกจากนี้ยังมีผลบวกจากจำนวน
สำหรับการวิเคราะห์รายละเอียดของการถ่วงดุลอำนาจระหว่างความถูกต้องและเวลาที่ดูบทความนี้
อัปเดตสำหรับ 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';
}
สิ่งนี้จะทำให้การสรุปชุดข้อมูลขนาดใหญ่เร็วขึ้นด้วยค่าใช้จ่ายของข้อผิดพลาดในการปัดเศษ nondeterministic (ฉันสมมติว่าผู้ใช้จะไม่สามารถกำหนดเธรดการแบ่งพาร์ติชันได้)