我是新手程序员.使用c ++控制台程序,我想计算两个数字是否几乎相等(2个数字之间的差值必须介于0.01之间.当2个数字为3到17.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)
用于上面的所有代码.