我正在研究C ++的==运算符可以比较的一些最大值范围。 实际处理用户提供的从0到9×10 19 的数字的程序。
让9×10 9 为用户提供的最大值。
if( x == y ) { cout << "x and y are equal"; }
那么,运营商==
能够比较那么大的价值范围吗?
答案 0 :(得分:1)
只要您的变量类型可以包含那么多的数字(例如long long int,long double等),&#39; ==&#39;做它的工作。这不是关于&#39; ==&#39;操作员,请注意您的数字在变量的范围内,以消除不良结果。
编辑:
- &#34;范围&#34;对于浮点数而言,这不是这个答案所暗示的。 - @StoryTeller
所以最好不要使用&#39; ==&#39;直接用于浮动数字。
可是:
#include <iostream>
using namespace std;
int main()
{
float x{5.5};
float y{5.5};
if(x==y) cout<<"As expected"<<endl;
return 0;
}
结果:
g++ -std=c++11 main.cpp -o a.out
./a.out
As expected
提到的问题是,当我将此代码中的浮动更改为:
float x{5.5666666};
float y{5.56666665};
代码也说他们是平等的。
答案 1 :(得分:1)
==
或其他运算符支持哪个数字范围完全取决于操作数的类型。
如果你有固有类型作为操作数,你可以查看std::numeric_limits
来探索特定系统的具体数量限制。
无论如何,==
和其他运算符可能会超载,例如一个BigNumber
类,能够处理超出内在限制的数字。
请注意,将浮点数与==
进行比较很少会按预期工作,因为由于多次计算,它们不太可能具有精确数字。 std::numeric_limits::epsilon
的示例显示了如何比较几乎相等的浮点数。
答案 2 :(得分:0)
答案有误导性。 operator==
将始终能够使用操作数中保存的任何值。它也可以为用户定义的类型定义,包括可以表示比内置类型更大的数字的类。这意味着operator==
在定义时将起作用。
如果您的程序未能保留用户提供的值,则会将其分配给x
或y
。如果他们的类型没有保留用户给出的数字的范围,它将被截断,或者您的程序可能会失败,具体取决于您获得数字的方式。在任何情况下,当评估语句x == y
时,operator==
将使用x
和y
所持有的值,无论它们是否包含您认为的值。