c'est normal, le résultat de std::accumulate est déduit ici à partir de la valeur d'initialisation que tu lui donne, 1, qui est un entier.
Donc il fait tous ces calculs sur des entiers, d'où la différence. (pour être tout à faire précis, il fait la multiplication en double, mais stocke à chaque fois le résultat temporaire dans un entier)
un petit 1. suffit pour passer tout ça en double et ça devrait aller beaucoup mieux.
c'est normal, le résultat de std::accumulate est déduit ici à partir de la valeur d'initialisation que tu lui donne, 1, qui est un entier.
Donc il fait tous ces calculs sur des entiers, d'où la différence. (pour être tout à faire précis, il fait la multiplication en double, mais stocke à chaque fois le résultat temporaire dans un entier)
un petit 1. suffit pour passer tout ça en double et ça devrait aller beaucoup mieux (ou plus verbeux, tu peux spécifier le premier type template de std::accumulate).
- Edité par epso il y a 2 minutes
Merci epso, ok je comprend mieux. Et il y a un truc que j'arrive pas faire c'est faire le produit de l'élément i à j par exemple. Le code suivant ne marche pas :
Je trouve cela bizarre que la deuxieme valeurs de accumulate soit exlu
Résultat=2.21*3.32=7,3372
En fait, c'est tout à fait normal, car un itérateur a la particularité de pouvoir représenter un élément invalide dans la collection dont il est tiré. C'est ce qui permet de fournir un itérateur cohérent lorsque l'on appelle la fonction membre end() qui renvoie un itérateur sur... ce qui suit le dernier élément de la collection.
Si bien que, lorsque l'on écrit une boucle pour classique en utilisant les itérateurs, on peut écrire un code proche de
/* iterator est le type d'itérateur adéquat pour la collection
* que l'on utilise
*/
for(iterator it = collection.begin(); it!=collection.end();++it){
/* on utilise l'itérateur ici */
}
sans risquer que collection.end() ne pose le problème d'avoir "un élément invalide à gérer".
Et, bien sur, à partir du moment où toutes les collections fournissent systématiquement une fonction permettant de récupérer ce qui suit le dernier élément valide, il devient "cohérent" faire en sorte que tous les algorithmes considère le dernier itérateur accessible comme... à ne pas utiliser
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Faire le produit des éléments d'un vecteur
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Cela correspond a quel element dans ton tableau ?
Discord NaN. Mon site.
Discord NaN. Mon site.