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 : 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;
}
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 :
g++ -Wall --std=c++1z
Merci d'avance.