Zmienne typu double nie przechowują dokładnie liczb zmiennoprzecinkowych. Zawsze jest to jakieś przybliżenie i musisz zdawać sobie sprawę, że czasami będzie narastał błąd wraz z kolejnymi obliczeniami. Nawet jeżeli jest on niewielki i pozornie go nie widać. Przeanalizuj swoje przykłady na tym kodzie:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double x, y, z;
cin >> x >> y >> z;
int i=0;
for(; x <= y; x+=z)
{
i++;
cout<<i<<" : \t";
cout <<fixed<<setprecision(20)<< x << " <= " << y;
cout << endl;
}
return 0;
}