Python 中最大的非整数浮点值是多少?

Gou*_*hor 1 python

在任何语言或平台中,浮点数的精度都是有限的。当以基数 2 书写时,它们“逗号后”的位数必须有限,并且该数字受用作尾数的位数限制(有关详细信息,请参阅浮点算术)。

当您获得递增值的浮点数时,会出现这样的情况:您无法编写足够的数字以在逗号之后结束 - 我认为对于很长的尾数和很短的指数实现来说这可能是错误的,但我怀疑它在实践中是存在的。

我怎样才能计算出那个数字,最大的float数字b,这样b.is_integer()是假的?

我要求进行一种适用于任何 Python 实现的计算,因此大概使用sys.float_info.

(显然,inf不算)

use*_*ica 5

最大的有限非整数浮点值是math.nextafter(sys.float_info.radix**(sys.float_info.mant_dig - 1), 0)

In [1]: import sys

In [2]: import math

In [3]: math.nextafter(sys.float_info.radix**(sys.float_info.mant_dig - 1), 0)
Out[3]: 4503599627370495.5
Run Code Online (Sandbox Code Playgroud)

sys.float_info.mant_digfloat是浮点表示形式的基数中的值的有效位数。

sys.float_info.radix**(sys.float_info.mant_dig - 1)是所有这些有效数字在小数点之前作为浮点的最小数字,并且调用math.nextafter生成其中这些有效数字之一在小数点之后的最大值。(sys.float_info.radix**(sys.float_info.mant_dig - 1)恰好是 int 而不是 float,但这没关系。)

  • `.hex()` 也很好地显示了它:`0x1.ffffffffffffffp+51` (2认同)