为何np.finfo(np.float16).max与np.float16理论最大值不符?
关于np.float16最大值的差异问题
核心原因
这是numpy早期版本的实现bug,后续版本已修复:
- 从IEEE 754半精度浮点数标准来看,
np.float16的精确最大有限数确实是65504.0,对应编码为符号位0、指数位11110、尾数位全1,计算式为2^15 * (1 + 1023/1024)。 - 旧版本numpy中,
np.finfo(np.float16).max被错误设置为65500,和标准定义不符。 - 在numpy 1.24及以上的新版本中,这个问题已经被修复,
finfo返回的max值会正确显示为65504.0。
验证方法
你可以直接在numpy中测试这个值的合法性:
import numpy as np print(np.float16(65504)) # 输出 65504.0,不会溢出为inf
内容的提问来源于stack exchange,提问作者P. Camilleri
相关产品推荐
相关产品推荐

