Bonjour à tous, j'ai un petit problème que j'aimerais vous soumettre.
Je possède une classe Vecteur3 générique qui possède comme attributs 3 "coordonnées" du type générique et comme méthodes les getteurs et setteurs qui vont bien avec.
Dans une autre classe : Feuille, un des attributs est une instance de cette classe avec comme type float. (les coordonnées de la feuille)
Enfin dans une classe grille, je possède un attribut limitesmin et un autre limitesmax qui sont tous deux de type vecteur3<double>. Cette classe grille lit pour chaque feuille ses coordonnées et les enregistre, si ils sont inférieurs ou supérieurs aux limites, dans les attributs correspondants.
Jusque là tout fonctionne : en sortie de boucle j'ai mes valeurs min et max qui sont ok (1 pour X, 2 pour Y et 3 pour Z, min et max sont égaux poucet exemple mais c'est sans importance)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 if ((*it)->aFeuille()) { // Variables temporaires pour les tests de limites float coordX ; float coordY ; float coordZ ; coordX = (*it)->feuille->coord.getX() ; coordY = (*it)->feuille->coord.getY() ; coordZ = (*it)->feuille->coord.getZ() ; // Tests des coordonnées limites if (coordX < limitesmin.getX()) limitesmin.setX(coordX) ; else if (coordX > limitesmax.getX()) limitesmax.setX(coordX) ; if (coordY < limitesmin.getY()) limitesmin.setY(coordY) ; else if (coordY > limitesmax.getY()) limitesmax.setY(coordY) ; if (coordZ < limitesmin.getZ()) limitesmin.setZ(coordZ) ; else if (coordZ > limitesmax.getZ()) limitesmax.setZ(coordZ) ; }
C'est la que tout se corse.
Je souhaite retrancher 0.1 aux valeurs min et ajouter 0.1 aux valeurs max. Le problème est que la valeur obtenue après cette opération n'est pas exacte. Voici le code :
les 6 variables tmp sont de type double. La valeur que j'obtiens pour tmp1 est 0.900000000000000002. Pour tmp2 1.89999999999999999, pour tmp3Code:
1
2
3
4
5
6
7 tmp1 = limitesmin.getX() - 0.1 ; tmp2 = limitesmin.getY() - 0.1 ; tmp3 = limitesmin.getZ() - 0.1 ; tmp4 = limitesmax.getX() + 0.1 ; tmp5 = limitesmax.getY() + 0.1 ; tmp6 = limitesmax.getZ() + 0.1 ;
2.899999999999999999, pour tmp4 1.10000000000000001, pour tmp5 2.10000000000000001 et pour tmp6 3.10000000000000001.
J'aimerais des valeurs exactes car sinon cela fausse mes calculs situés dans le suite du code.
Merci d'avance pour votre aide