我是新手程序员。使用c ++控制台程序,我要计算两个数字是否几乎相等(这两个数字之间的差必须在 0.01 之间。当这两个数字相等时,该程序会给出正确的结果是 3 到 17.99 。但是当数字超出此范围时,它将不起作用。代码如下:-
double num,num2;
while(cin>>num>>num2)
{
if(abs(num-num2)<=0.01)
{
cout<<"The numbers are almost equal";
}
}
我也尝试过这种方式:-
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<<"~";
}
}
这两种方法都不起作用。我已经用(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<<"~";
}
}
}
有效。但是正如我们从数学上知道的:-
num-num2<=0.01 Or, -num2-0.01<=-num Or, num2+0.01>=num
,因此 num-num2 <= 0.01 的表达方式与 num2 + 0.01> = num 相同。在相同的方法中, num2-num <= 0.01 等效于 num + 0.01> = num2 。那么,为什么最后一种方法可行,而不是前两种方法可行?我只是找不到原因。所以,伙计,请帮帮我。帮助我知道为什么会这样吗?
请注意:-为了使程序正常运行,我已经声明了必须声明的内容。另外这句话:-
using namespace std;
在以上所有代码中都使用。
答案 0 :(得分:8)
好像您正在使用C中的abs()
,并且从documentation可以看到,它接受类型为int
的值,因此您的参数是四舍五入的。您可能需要从那里使用fabs()
或更好的C ++变体std::abs()
来提供适当的overloads
另一种情况告诉您“ using namespace std;
不是您的朋友”