Python中浮点数('Inf')有什么意义?

Nir*_*uah 40 python

只是在这里想知道,在程序中使用变量存储无限值有什么意义?是否有任何实际用途,是否有任何优先使用的情况foo = float('Inf'),或者它只是为了放入它而卡住的小片段?

小智 61

它作为一个无限的上限值进行比较.这对于找到某些东西的最低值很有用.例如,在遍历树时计算路径路径成本.

例如,在选项列表中查找"最便宜"的路径:

>>> lowest_path_cost = float('inf')
>>> # pretend that these were calculated using some worthwhile algorithm
>>> path_costs = [1, 100, 2000000000000, 50]
>>> for path in path_costs:
...   if path < lowest_path_cost:
...     lowest_path_cost = path
...
>>> lowest_path_cost
1
Run Code Online (Sandbox Code Playgroud)

如果您没有float('Inf')可用,您将使用什么价值the initial lowest_path_cost?就9999999足够- float('Inf')消除了这个猜测.

  • @SolutusImmensus 如果 path_costs 是一个空列表怎么办?如果 path_costs 是生成器怎么办?在这个人为的例子中,最好的解决方案是lowest_path_cost = min(path_costs),但很多时候你需要比这更复杂的逻辑,而这不是一个选择 (5认同)
  • 来自path_costs数组的第一个值怎么样? (3认同)
  • 不,因为二进制表示。整数存储为给定整数的二进制表示形式。浮点值使用 IEEE 754 标准存储,该标准为 +/-无穷大、+/- 0 和“NaN”(不是数字)保留了特殊值 (2认同)

Rah*_*thi 11

文档:

添加了许多浮点功能.float()函数现在将字符串nan转换为IEEE 754 Not A Number值,+ inf和-inf转换为正或负无穷大.这适用于任何具有IEEE 754语义的平台.(供稿人:Christian Heimes;第1635期.)

另请参阅:使用Infinity和NaNs


Opt*_*der 6

float('inf')
Run Code Online (Sandbox Code Playgroud)

如上面的回答所述,float('inf')用于设置具有无限大值的变量。简单来说,它将值设置为+ve infinty

或者,我们可以使用以下语句,

import sys
least_value = sys.maxsize
Run Code Online (Sandbox Code Playgroud)

了sys.maxsize是比较常用的,用于初始设置较大的值。当我们的目标是从给定的一组值中找到最小值时。

此外,如果我们想从给定的一组值中找到最大值。我们可以使用以下方法。

import sys
greatest_value = -sys.maxsize - 1

# logic for comparing with rest of values
Run Code Online (Sandbox Code Playgroud)

所述-sys.maxsize - 1用于设置的初始值作为-ve无穷大。

  • 我不建议这样做,因为“sys.maxsize”指的是序列索引的最大大小,但其他数字可能更大;在 64 位平台上,`2.0**100` 和 `2**100` 都会超过这个值(后者是因为 Python 默认支持任意精度的 `int`)。 (2认同)