You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何float32浮点数相等性检查可通过而float64会失败?

为什么float32的相等性检查能通过?

核心原因是float32的精度有限,两个原本在float64下有细微差异的值,被舍入到了同一个float32的二进制表示上。

  • 先看float64的情况:0.0001和0.0003都无法用二进制浮点数精确表示。np.float64(0.0003)是直接把十进制0.0003近似为最接近的float64值;而np.float64(0.0001 * 3)是先把0.0001近似为float64,再乘以3,得到的近似值和前者有极小差异(一个约为0.0002999999999999999889,另一个约为0.0003000000000000000333),所以x == y失败。

  • 再看float32的情况:float32只有24位有效二进制位数(含隐含位),对应十进制约6-7位有效数字。上述两个float64的差值远小于float32在0.0003这个数量级上的最小可分辨单位(即ulp,最后一位单位)。当把这两个float64值转成float32时,都会被舍入到同一个最接近的float32精确值——具体来说,这个值是0.0003000000142492354(二进制表示下的精确float32值)。

不管是通过astype(np.float32)转换,还是直接用np.float32(0.0003)、np.float32(0.0001*3)初始化,最终得到的都是这个相同的float32值,所以相等性检查能通过。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:25:20