W pętli w C ++ z podwójnym rozdzielaniem o jeden krok wcześniej, nie osiągnięto wartości granicznej

Mam prosty program C ++ skompilowany przy użyciu gcc 4.2.4 na 32-bitowym Ubuntu 8.04. To mafor- pętla, w którejdouble zmienna jest zwiększana od zera do jednego z określonym rozmiarem kroku. Kiedy rozmiar kroku jest0.1, zachowanie jest tym, czego oczekiwałem. Ale gdy rozmiar kroku wynosi „0,05”, pętla kończy działanie0.95. Czy ktoś może mi powiedzieć, dlaczego tak się dzieje? Dane wyjściowe są zgodne z poniższym kodem źródłowym.

#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;
}

WYDAJNOŚĆ

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$

questionAnswers(10)

yourAnswerToTheQuestion