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

TensorFlow中float64张量无法保留12位小数的问题求助

TensorFlow float64张量精度丢失问题解析与解决

首先要明确:float64(双精度浮点数)本身无法精确表示所有十进制小数,这是浮点数二进制存储的固有特性,和TensorFlow无关。

你给出的代码:

tensor = tf.constant([57.695030261422, 11.911734826863], dtype=tf.float64)

这两个十进制数值在二进制浮点数体系中是无限循环的,因此存储时会被近似为最接近的可表示值,最终出现你看到的精度丢失。

验证问题本质

你可以直接用Python原生的float(本质就是双精度)验证,结果和TensorFlow张量完全一致:

print(float(57.695030261422))
print(float(11.911734826863))

解决办法

如果需要精确保留12位小数,推荐两种方案:

  • 整数存储法:将小数转换为整数(乘以10^12),用tf.int64存储,计算时再转回小数,彻底避免浮点数精度损失:
    # 转为整数存储
    tensor_int = tf.constant([57695030261422, 11911734826863], dtype=tf.int64)
    # 计算时还原为小数
    tensor_float = tf.cast(tensor_int, tf.float64) / 1e12
    
  • 字符串存储法:用tf.strings存储精确的十进制字符串,仅在需要计算时转换为高精度类型(适合对精度要求极高但计算量不大的场景),但会增加运算复杂度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 05:01:41