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

为何调用t.item()时PyTorch浮点数出现精度异常?1.3无法准确表示

问题解析:PyTorch中1.3浮点数显示差异的原因

这不是PyTorch的bug,而是单精度浮点数的二进制存储特性导致的,和PyTorch本身无关:

  • 十进制的1.3无法被二进制浮点数精确表示:1.3转换成二进制是无限循环的小数(类似十进制里的1/3=0.333...),而torch.FloatTensor(包括默认的torch.Tensor)使用的是32位单精度浮点数,存储位数有限,只能存储1.3的近似值,实际存储的数值就是1.2999999523162842。
  • PyTorch打印张量时会自动做四舍五入处理,所以tensor([[1.3000]])是简化后的显示结果,而item()方法会直接返回张量存储的原始精确值,所以两者输出不同。
  • 1.5能正常精确表示是因为它的二进制是有限位数的:1.5的二进制是1.1,可以被32位浮点数完全存储,所以不管是打印张量还是用item()获取,结果都是1.5。

你可以用以下代码验证这个特性:

# 验证Python原生float的近似性(Python float是64位双精度)
print(float(1.3))  # 输出: 1.3000000000000001

# 用双精度张量对比误差
t_double = torch.DoubleTensor([[1.3]])
print(t_double)  # 输出: tensor([[1.3000]], dtype=torch.float64)
print(t_double.item())  # 输出: 1.3000000000000001

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:40:25