J'essaie de calculer la somme des carrés d'un tableau de flottants.Réduire l'erreur d'arrondi de la somme des carrés des flotteurs
Comment faire pour réduire l'erreur d'arrondi? J'essaie d'additionner environ 5.000.000 flottants dans la boucle interne de mon programme actuel.
test.cpp:
#include <iostream>
#include <stdint.h>
template <typename Sum, typename Element>
Sum sum(const size_t st, const size_t en) {
Sum s = 0;
for (size_t i = st; i < en; ++ i) {
s += Element(i)*Element(i);
}
return s;
}
int main() {
size_t size = 100000;
std::cout << "double, float: "
<< sum<double, float>(0,size) << "\n";
std::cout << "int, int: "
<< sum<int, int>(0,size) << "\n";
}
Sortie:
double, float: 3.33328e+14
int, int: 216474736
probablement va lire plus sur https://en.wikipedia.org/wiki/Pairwise_summation et https://en.wikipedia.org/wiki/Kahan_summation_algorithm après que je sois de retour à la maison. –
Triez-les et commencez par le plus petit. – EJP
'size_t size = 100000;' est maintenant un peu trop pour 'int'. – LogicStuff