For-loop em C ++ usando double breaking one step early, valor de limite não atingido

Eu tenho um programa C ++ simples compilado usando o gcc 4.2.4 no Ubuntu 8.04 de 32 bits. Tem umfor-loop em que umdouble variável é incrementada de zero a um com um certo tamanho de passo. Quando o tamanho do passo é0.1, o comportamento é o que eu esperava. Mas quando o tamanho do passo é '0.05', o loop sai depois0.95. Alguém pode me dizer por que isso está acontecendo? A saída segue o código-fonte abaixo.

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

SAÍDA

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