在寻找无限值时,我发现:
在Python 3.7中,INFINITY > INFINITY - 1返回False,如果执行INFINITY < INFINITY - 1,则返回False

同样在C++的情况下,我得到的结果是INFINITY

这是因为我们对INFINITY没有正确的定义吗?现在,我们只知道这是一个很大的数字,我们不能说'X'在某个特定数字x之后开始。

回到问题:
现在,某些数字x-1明显大于INFINITY。为什么number = 10不是这种情况?

Python代码:

A = float('inf')
B = float('inf')

print(A > B-1) # returns False
print(A < B-1) # returns False

C++代码:
#include <iostream>
#include <limits>
using namespace std;

int main() {
    double a = numeric_limits<double>::infinity();
    double b = numeric_limits<double>::infinity();

    if (a>(b-1)){cout<<"TRUE";}
    else {cout<<"FALSE"<<endl;} //returns else part- FALSE

    if (a<(b-1)){cout<<"TRUE";}
    else {cout<<"FALSE";} //returns else part- FALSE

    return 0;
}

对于其他number > number - 1True将返回number < number - 1,而False将返回ojit_code。

最佳答案

从数学上考虑断言x < x - 1是正确的。但是,这不是计算机“思考”的方式。浮点数的精度有限。甚至不成立:

print(1e90 < 1e90 - 1)  # False
print(1e90 == 1e90 - 1)  # True

这是因为使用 double 时1e90 - 1会四舍五入为1e90

使用无穷大时会发生类似的情况。在比较之前,先对表达式inf - 1求值。inf - 1评估什么? represent positive infinity只有一个值,因此inf - 1的计算结果为inf

结果,当您比较inf < inf - 1时,您实际上是在比较inf < inf,这就是为什么要获得False的原因。

关于python - 比较无穷大,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55392140/

10-11 11:24