précision de std::minus<T>() laisse à désirer
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 :
Code:
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;
} |
rien de bien méchant ; globalement on demande de faire va -= vb.
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 :
Citation:
g++ -Wall --std=c++1z
Merci d'avance.