Bonjour à tous,
Je viens de me rendre compte d'un léger écart de valeurs lorsque j'utilise std::transform() conjointement avec std::minus<float>().
Pour la faire courte, voici le code :
rien de bien méchant ; globalement on demande de faire va -= vb.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <iostream> #include <algorithm> int main() { std::vector<float> va(4, 3.1f); std::vector<float> vb(4, 3.0f); std::transform(va.cbegin(), va.cend(), vb.begin(), va.begin(), std::minus<float>()); for(auto & v:va) { std::cout << v << ' '; } std::cout << '\n'; return 0; }
Cependant, là où je m'attends à avoir le résultat 0.1 0.1 0.1 0.1, j'obtiens les valeurs suivantes : 0.09999... 0.09999... 0.09999... 0.09999L'erreur est probablement minime, néanmoins, si je fais une bête boucle, j'ai un résultat juste au moins.
Vous savez comment régler ce problème ?
Le code est compilé sous Linux avec G++ via geany avec les options suivantes :Merci d'avance.g++ -Wall --std=c++1z
Partager