У меня есть простая программа на C++, скомпилированная с использованием gcc 4.2.4 на 32-битной Ubuntu 8.04. Он имеет цикл for, в котором переменная double увеличивается от нуля до единицы с определенным размером шага. Когда размер шага равен 0.1, поведение соответствует ожидаемому. Но когда размер шага равен «0,05», цикл завершается через 0.95. Кто-нибудь может сказать мне, почему это происходит? Вывод соответствует приведенному ниже исходному коду.
#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;
}
ВЫХОД
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$