c++算一次函数的代码,for循环出了一些奇怪的情况

如果我把for设为a+=0.1,b+=0.1,他就无法输出一些样例
而a+=0.5,b+=0.5却可以


#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
double x,y;    //第一个点 
double xt,yt;    //第二个点
int pe;    //一次函数是否过原点,过原点为1,不过原点为0 

//默认数据有效

int main(){
    while(cin>>pe){    //先判断函数是否是正比例函数 
        if(pe==1){
            cin>>x>>y;     //正比例函数只要一个坐标就行了 
            double ans;
            ans=x/y;
            cout<<"x="<<ans<<"y";
            continue;
        }else{
            cin>>x>>y>>xt>>yt;    //一次函数需要两个坐标 
            double ansa,ansb;    //分别是y=a*x+b 
            for(double a=-2000;a<=2000;a+=0.5){    //a
                for(double b=-2000;b<=2000;b+=0.5){    //b
                    if(a*x+b-y==0&&a*xt+b-yt==0){
                        ansa=a;
                        ansb=b;
                        if(b<0){
                            if(ansa==-1){    //特判1,-1的特殊形式 
                                cout<<"x="<<"-y-"<<abs(b)<<endl;
                                break;        
                            }else if(ansa==1){
                                cout<<"x="<<"y-"<<abs(b)<<endl;
                                break;
                            }
                            cout<<"x="<<ansa<<"y-"<<abs(b)<<endl;
                            break;
                        }else{    //特判 1,-1的特殊形式 
                            if(ansa==-1){
                                cout<<"x="<<"-y+"<<abs(b)<<endl;
                                break;        
                            }else if(ansa==1){
                                cout<<"x="<<"y+"<<abs(b)<<endl;
                                break;
                            }
                            cout<<"x="<<ansa<<"y+"<<abs(b)<<endl;
                            break;
                        }
                        continue;
                    }
                }
            }
        }
    }
}

先怀疑是精度问题
因为指数形式的0.5恰好是2*e^-1,但是0.1在二进制下除不尽,所以有可能是精度累加的问题
你可以打印对应值出来看一下