if(abs(num-num2)<= 0.01)cout <<"XYyx"; 不能用c ++工作

Cur*_*ner 0 c++ c++17

我是新手程序员.使用c ++控制台程序,我想计算两个数字是否几乎相等(2个数字之间的差值必须介于0.01之间.当2个数字为317.99时,该程序给出正确的结果.但是当数字超出此范围时它不起作用.这是代码: -

double num,num2;
while(cin>>num>>num2)
{
    if(abs(num-num2)<=0.01)
    {
       cout<<"The numbers are almost equal";
    }
} 
Run Code Online (Sandbox Code Playgroud)

而且我也尝试过这种方式: -

double num,num2;
while(cin>>num>>num2)
{
    if(num>num2)
    {
        if(num-num2<=0.01)
            cout<<"~";
    }
    else if(num2>num)
    {
        if(num2-num<=0.01)
            cout<<"~";
    }
} 
Run Code Online (Sandbox Code Playgroud)

它不适用于这两种方式.我用(17.99,17.88),(12.34,12.35),(3.01,3.00),(18.00,17.99),(2.99,3.00)测试了这个,依此类推.正如我之前所说,它只适用于[3,18]范围内的那些数字.但是,当我尝试使用此代码时: -

double num,num2;
while(cin>>num>>num2)
{
   if(num>num2)
   {
      if(num2+0.01>=num)
      {
         cout<<"~";
      }
   }
   else if(num2>num)
   {
      if(num+0.01>=num)
      {
         cout<<"~";
      }
   }
} 
Run Code Online (Sandbox Code Playgroud)

有效.但正如我们在数学上所知: -

num-num2<=0.01  Or, -num2-0.01<=-num  Or, num2+0.01>=num 
Run Code Online (Sandbox Code Playgroud)

因此num-num2 <= 0.01与说num2 + 0.01> = num的方式相同.在相同的方法中,num2-num <= 0.01等于num + 0.01> = num2.那么,为什么最后的方式应该工作而不是前两种方式呢?我只是无法发现原因.所以,伙计,请帮助我.帮助我知道为什么会这样?

请注意: - 我已经声明了我要声明的其他内容,以使程序正常工作.这句话也是: -

using namespace std; 
Run Code Online (Sandbox Code Playgroud)

用于上面的所有代码.

Sla*_*ica 8

看起来你正在使用abs()C语言,你可以从文档中看到它接受类型的值,int所以你的参数是四舍五入的.您需要使用fabs()那里或更好的C++变体std::abs(),它提供适当的重载

这又一个案例告诉你" using namespace std;不是你的朋友"