Tengo un programa simple en C++ compilado usando gcc 4.2.4 en Ubuntu 8.04 de 32 bits. Tiene un bucle for
en el que una variable double
se incrementa de cero a uno con un determinado tamaño de paso. Cuando el tamaño del paso es 0.1
, el comportamiento es el esperado. Pero cuando el tamaño del paso es '0.05', el ciclo sale después de 0.95
. ¿Puede alguien decirme por qué está pasando esto? La salida sigue el código fuente a continuación.For-loop en C++ utilizando doble ruptura un paso antes, no se alcanzó el valor límite
#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
[email protected]:~/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
[email protected]:~/code/scratch$
puede ser un problema de coma flotante, ¡tengo que comprobarlo! –
¡No acepte las respuestas de inmediato! Dé a las personas un tiempo para responder a su pregunta y escriba una respuesta. – GManNickG