Pour la boucle en C++ à l'aide de double de casser une étape précoce, valeur limite pas atteint

J'ai un simple programme en C++ compilé avec gcc 4.2.4 sur 32 bits Ubuntu 8.04. Il a un for-la boucle dans laquelle un double variable est incrémentée à partir de zéro à un, avec une certaine étape de la taille. Lorsque la taille du pas est 0.1, le comportement est ce que j'attendais. Mais quand la taille du pas est '0.05', la boucle s'arrête après 0.95. Quelqu'un peut me dire pourquoi ce qui se passe? La sortie suit le code source ci-dessous.

#include <iostream>

using namespace std;

int main()
{
    double rangeMin = 0.0;
    double rangeMax = 1.0;
    double stepSize = 0.1;

    for (double index = rangeMin; index <= rangeMax; index+= stepSize)
    {
        cout << index << endl;
    }
    cout << endl; 

    stepSize = 0.05;
    for (double index = rangeMin; index <= rangeMax; index+= stepSize)
    {
        cout << index << endl;
    }

    return 0;
}

SORTIE

sarva@savija-dev:~/code/scratch$ ./a.out 
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1

0
0.05
0.1
0.15
0.2
0.25
0.3
0.35
0.4
0.45
0.5
0.55
0.6
0.65
0.7
0.75
0.8
0.85
0.9
0.95
sarva@savija-dev:~/code/scratch$
  • peut-être à virgule flottante de problème, j'ai vérifier!!!
  • Ne pas accepter des réponses tout de suite! Donner aux gens un certain temps pour obtenir à votre question et le type de réponse.
InformationsquelleAutor | 2009-08-17