Python中最小正浮点数是5e-324吗?基于测试代码的疑问
你的判断不完全准确,精确最小正浮点数是4.9406564584124654e-324
你观察到的5e-324是这个精确值的近似表达,具体原因如下:
Python的
float类型基于IEEE 754双精度标准,这类浮点数分为两种核心类型:- 正规数:最小正正规数是
sys.float_info.min,约为2.2250738585072014e-308,这是用标准指数范围能表示的最小数。 - 非正规数(亚正规数):当数值小于正规数最小值时,浮点数会切换到非正规表示模式,用固定的最小指数(-1023)和非零尾数存储更小的数值。能表示的最小正非正规数就是2^-1074,精确值为4.9406564584124654e-324,也就是你看到的5e-324的精确原型。
- 正规数:最小正正规数是
你的循环代码中,当
n降到正规数最小值后,继续除以2会逐步进入非正规数范围,直到最后无法再表示非零值,最终变为0。而你测试的5e-324刚好和这个最小非正规数非常接近,所以能被正确解析为该精确值。如果尝试解析比4.9406564584124654e-324更小的数值(比如
4e-324),Python会将其舍入为0.0,因为IEEE 754双精度标准无法表示这么小的非零值。
你可以通过以下代码直接获取这个最小正浮点数:
# 方法1:从负无穷向0移动一步获取最小正浮点数 print(float('-inf').nextafter(0)) # 方法2:直接计算最小非正规数 print(2 ** -1074)
内容的提问来源于stack exchange,提问作者Rodrigo Alvaro Santo SD 6
相关产品推荐
相关产品推荐

