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

为何PyTorch的tensor.item()对.0/.5结尾的数输出精确,其他实数则不精确?

PyTorch tensor.item() 精度差异问题解析

问题现象

当执行以下代码时:

x = torch.tensor([3.5])

print(x)
print(x.item())
print(float(x))

输出为:(tensor([3.5000]), 3.5, 3.5),tensor.item()和float()均返回精确值3.5。

但将张量参数改为3.1这类非.0/.5结尾的实数时:

x = torch.tensor([3.1])

print(x)
print(x.item())
print(float(x))

输出变为:(tensor([3.1000]), 3.0999999046325684, 3.0999999046325684),tensor.item()返回了不精确的数值。

核心疑问:为什么PyTorch的tensor.item()对.0或.5结尾的实数输出精确,对其他实数存在精度问题?

原因解析

这和PyTorch本身无关,核心是二进制浮点数的存储逻辑:

  • 计算机用二进制存储浮点数,只有当十进制数能写成 m/(2^n)(m、n为整数)的形式时,才能被二进制浮点数精确存储。.0(整数)、.5(即1/2)都满足这个条件,比如3.5就是7/2,自然能被精确存储。
  • 而像3.1这样的数,转换成二进制后是无限循环的小数,有限位的二进制浮点数(比如PyTorch默认的float32)根本存不下它的精确值,只能存一个最接近的近似值。当你用item()或者float()把张量值转成Python的浮点数时,这个底层的近似值就会被直接输出,所以看起来“不精确”。
  • 至于打印张量时显示3.1000,那是PyTorch做了格式化输出,自动截断了多余的小数位,并不是张量实际存储的真实值。

内容的提问来源于stack exchange,提问作者gabriel-pimentel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:43:27