运营商支持的数字范围

时间:2017-09-17 10:33:23

标签: c++

我正在研究C ++的==运算符可以比较的一些最大值范围。 实际处理用户提供的从0到9×10 19 的数字的程序。

让9×10 9 为用户提供的最大值。

if( x == y ) { cout << "x and y are equal"; }

那么,运营商==能够比较那么大的价值范围吗?

3 个答案:

答案 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==在定义时将起作用。

如果您的程序未能保留用户提供的值,则会将其分配给xy。如果他们的类型没有保留用户给出的数字的范围,它将被截断,或者您的程序可能会失败,具体取决于您获得数字的方式。在任何情况下,当评估语句x == y时,operator==将使用xy所持有的值,无论它们是否包含您认为的值。