HOWTO · Python

在 Python 中查找最大浮点数

本文包括两种在 Python 中查找 float 数据类型最大值的方法。其中一种是使用 sys 模块的 float_info.max 而第二种方法是使用 numpy 库的 finfo() 函数。

本页内容

在此示例所示的运行环境中,Python 内置的 float 类型最大有限值为 1.7976931348623157e+308。使用 sys.float_info.max 可获取你当前运行环境中的上限。如果代码使用 NumPy,numpy.finfo(dtype).max 会返回所选浮点类型的最大值。这两种表达式的适用范围不同:一种对应 Python 内置 float 的上限,另一种则取决于传入的数据类型。

使用 sys.float_info.max 查找最大有限浮点数

sys 模块提供 float_info,这是一个命名元组,其中包含内置 float 表示方式的详细信息,包括最大有限值。如果只需要上限,请选取它的 max 属性;打印整个元组还会显示精度和最小正正规值等其他信息。

运行以下标准库查询:

本节中的代码以及显示的标签或输出仍为英文。

import sys

print(sys.float_info.max)
1.7976931348623157e+308

该表达式返回一个有限的 Python float。其显示的十进制形式为 1.7976931348623157e+308。需要内置类型的有限上限时,可以使用这个值,例如设置一个有限哨兵值,或检查计算结果的范围。它并不适用于 Python 中的所有数值类型;例如,整数没有这个浮点上限。

使用 numpy.finfo() 查询浮点类型

对于 NumPy 数组,可以用 numpy.finfo() 查询所用的数据类型。它的 max 属性是该类型的最大有限值。下面的示例选择 numpy.float64;这不会改变 Python 内置 float 的上限,也不会给出所有 NumPy 类型的上限。

运行以下 numpy.float64 示例:

本节中的代码以及显示的标签或输出仍为英文。

import numpy as np

print(np.finfo(np.float64).max)
1.7976931348623157e+308

传入其他浮点类型即可查看对应的限制。这在为数组计算选择边界,或检查某种类型支持的范围时很有用。函数名的拼写很重要:numpy.finfo(dtype) 用于报告浮点数的机器限制。运行此示例的环境必须安装 NumPy;上面的标准库方法则不需要 NumPy。

最大有限值与无穷大

最大有限值和正无穷大是不同的。sys.float_info.max 是有限数值;相比之下,float(‘inf’) 和 math.inf 表示正无穷大,这是一种大于任何有限浮点数的特殊值。如果计算或算法需要不受上限约束的哨兵值,可以使用无穷大;如果需要最大有限值,则不要使用它。

运行以下示例,比较最大有限值与正无穷大:

本节中的代码以及显示的标签或输出仍为英文。

import math
import sys

largest_finite = sys.float_info.max
positive_infinity = float("inf")

print(largest_finite)
print(math.inf == positive_infinity)
print(largest_finite < positive_infinity)
1.7976931348623157e+308
True
True

math.inf 也可以表示正无穷大,而 -math.inf 表示负无穷大。两者都不是最大有限浮点数。命名变量或验证结果时应注意这一区别:检查数值是否有限,与检查它是否达到最大有限值,回答的是不同问题。对于内置类型的上限,请使用 sys.float_info.max;对于 NumPy 浮点类型,请根据数据实际使用的类型调用 numpy.finfo(dtype).max。