Bonjour.

J'utilise le compilateur visual c++ 2008, processeur pentium4.

Voici une opération avec des doubles :

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>
 
using namespace std;
 
void main(){
 
  double d1 = 5946100.5;
  double d2 = 5946048.0;
  int iVal = 4000;
 
  double dDelta = d1 - d2;
  dDelta /= (double)iVal;
 
  for(int i = 0; i < 4000; i++)
    d2 += dDelta;
 
  cout << d2;
}
A la sortie, d2 = 5946100.4999....;

Voici la même chose avec des flottants :

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>
 
using namespace std;
 
void main(){
 
  float f1 = 5946100.5f;
  float f2 = 5946048;
  int iVal = 4000;
 
  float fDelta = f1 - f2;
  fDelta /= (float)iVal;
 
  for(int i = 0; i < 4000; i++)
    f2 += fDelta;
 
  cout << f2;
}
A la sortie, f2 = 5946048;

L'addition ne se fait pas.

Pouvez-vous me dire ce que je n'ai pas compris avec les nombres flottants.

PS : mode debug sans optimisation.