在寻找无限值时,我发现:
在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 - 1
,True
将返回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/