51

只是一个我有点困惑的问题

所以我在搞乱float('inf'),有点想知道它是用来做什么的。

我还注意到,如果我添加,-inf + inf我得到nan的是否与零相同。

我对这两个值的用途感到困惑。

另外,当我这样做时,我nan - inf不明白-infnan确定这一切都很简单,但是我偶然发现了它们,并且不知道它们在做什么。

4

5 回答 5

60

inf是无穷大 - 一个大于任何其他值的值。-inf因此小于任何其他值。

nan代表 Not A Number,这不等于0.

虽然正无穷和负无穷可以说是关于对称的0,但对于任何值都可以这样说n,即两者相加的结果nan。这个想法在这个 math.se 问题中讨论。

因为nanis(字面意思)不是数字,所以不能用它做算术运算,所以第二次运算的结果也不是数字(nan

于 2013-07-13T09:03:21.943 回答
7

nan表示“不是数字”,如果您执行的计算结果不能以数字表示,您会得到一个浮点值。您执行的任何计算也NaN将导致NaN.

inf意味着无穷大。

例如:

>>> 2*float("inf")
inf
>>> -2*float("inf")
-inf
>>> float("inf")-float("inf")
nan
于 2013-07-13T09:03:05.460 回答
5

Inf是无穷大,它是一个“比所有其他数字都大”的数字。尝试从中减去任何你想要的东西,它不会变得更小。所有数字都是< Inf-Inf是相似的,但比一切都小。

NaN表示非数字。如果你试图做一个没有意义的计算,你会得到NaN. Inf - Inf就是这样一种计算。通常NaN用于仅表示缺少某些数据。

于 2013-07-13T09:05:07.657 回答
5

你说:

当我做nan - inf我不明白-inf我得到nan

这是因为任何包含NaN作为操作数的操作都会返回NaN.

与 的比较NaN将返回无序结果

>>> float('Inf') == float('Inf')
True
>>> float('NaN') == float('NaN')
False
于 2013-07-13T09:16:47.800 回答
3

我使用 inf/-inf 作为初始值来找到测量的最小值/最大值。假设您使用传感器测量温度,并且想要跟踪最低/最高温度。传感器可能提供有效温度或可能损坏。伪代码:

# initial value of the temperature
t = float('nan')          
# initial value of minimum temperature, so any measured temp. will be smaller
t_min = float('inf')      
# initial value of maximum temperature, so any measured temp. will be bigger
t_max = float('-inf')     
while True:
    # measure temperature, if sensor is broken t is not changed
    t = measure()     
    # find new minimum temperature
    t_min = min(t_min, t) 
    # find new maximum temperature
    t_max = max(t_max, t) 

上面的代码之所以有效,是因为 inf/-inf/nan 对 min/max 操作有效,所以不需要处理异常。

于 2018-11-04T12:03:23.603 回答