C++ std::accumulate ne donne pas la somme prévue

double numbers[ ] = { 1, 0.5 ,0.333333 ,0.25 ,0.2, 0.166667, 0.142857, 0.125,
                       0.111111, 0.1 } ;
std::vector<double> doublenumbers ( numbers , numbers + 10 ) ;
std::cout << std::accumulate ( doublenumbers.begin( ) , doublenumbers.end( ) , 0 ) ;

Ce produit 1, ce qui est évidemment faux. Toutes les explications?

  • +1, c'est un important gotcha qui me piquer plusieurs fois.
  • aussi, le vecteur n'est pas nécessaire; vous pouvez utiliser des pointeurs comme des itérateurs: std::accumulate ( numbers, numbers + sizeof numbers / sizeof *numbers, 0.0);. [Dans le code réel, vous auriez probablement une constante ou une variable num_numbers plutôt que sizeof numbers / sizeof *numbers]
  • Voir ma réponse pour un moyen facile de prévenir ce mal de tête à l'avenir.
InformationsquelleAutor user435354 | 2010-08-30