For-loop en C ++ usando doble ruptura de un paso antes, no se alcanzó el valor de límite

Tengo un programa simple de C ++ compilado usando gcc 4.2.4 en Ubuntu 8.04 de 32 bits. Tiene unfor-loop en el que undouble la variable se incrementa de cero a uno con un tamaño de paso determinado. Cuando el tamaño del paso es0.1, el comportamiento es lo que yo esperaba. Pero cuando el tamaño del paso es '0.05', el bucle sale después0.95. ¿Puede alguien decirme por qué está pasando esto? La salida sigue el código fuente a continuación.

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

SALIDA

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$

Respuestas a la pregunta(10)

Su respuesta a la pregunta