Den*_*ach 68

>>> import sys
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53,
epsilon=2.2204460492503131e-16, radix=2, rounds=1)
Run Code Online (Sandbox Code Playgroud)

最小的是sys.float_info.min(2.2250738585072014e-308),最大的是sys.float_info.max(1.7976931348623157e + 308).请参阅其他属性的文档.

更新:您通常可以将非规范化最小化为sys.float_info.min.但请注意,这些数字表示精度不足.


Juh*_*älä 14

看这篇文章.

帖子的相关部分:

In [2]: import kinds 
In [3]: kinds.default_float_kind.M 
kinds.default_float_kind.MAX         kinds.default_float_kind.MIN 
kinds.default_float_kind.MAX_10_EXP  kinds.default_float_kind.MIN_10_EXP 
kinds.default_float_kind.MAX_EXP     kinds.default_float_kind.MIN_EXP 
In [3]: kinds.default_float_kind.MIN 
Out[3]: 2.2250738585072014e-308 


Eri*_*got 8

作为对前面答案的一种理论补充,我想提一下,"魔术"值±308直接来自浮点数的二进制表示. 双精度浮点数的形式为±c*2**q,其中"小"小数值为c(~1),q为整数,用11位二进制数字写入(其符号包括1位).2**(2**10-1)具有308(十进制)数字的事实解释了极值浮点值中10**±308的出现.

用Python计算:

>>> print len(repr(2**(2**10-1)).rstrip('L'))
308
Run Code Online (Sandbox Code Playgroud)


ste*_*eha 7

Python 使用双精度浮点数,它可以保存大约 10 到 -308 到 10 到 308 次方的值。

http://en.wikipedia.org/wiki/Double_precision_floating-point_format

在 Python 提示符下试试这个实验:

>>> 1e308
1e+308
>>> 1e309
inf
Run Code Online (Sandbox Code Playgroud)

10 到 309 的电源是溢出,但 10 到 308 不是。QED。

实际上,您可能可以通过denormals获得小于 1e-308 的数字,但这会对性能造成重大影响。我发现 Python 能够处理1e-324但下溢1e-3250.0作为值返回。


Ben*_*tte 5

从技术上讲,最小浮点数是-inf最大浮点数inf

>>> (float('-inf')            #   negative infinity 
< -1.7976931348623157e+308    #*  smallest float that is not negative infinity 
< -4.9406564584124654e-324    #*  biggest negative float that is not zero
< 0                           #   zero duh
< 4.9406564584124654e-324     #*  smallest positive float that is not zero
< 1.7976931348623157e+308     #*  biggest float that is not positive infinity
< float('inf'))               #   positive infinity
True
Run Code Online (Sandbox Code Playgroud)

数字与*机器相关和实现相关。