float32和float64之间的真正区别

A_D*_*A_D 7 python types numpy

我想了解之间的实际差异float16,并float32在结果精度方面.例如,Numpy允许您选择所需数据类型的范围(np.float16, np.float32, np.float64).我担心的是,如果我决定使用float 16来保留内存并避免可能的溢出,那么与float32相比,这会造成最终结果的丢失吗?

谢谢

Fur*_*sen 35

a = np.array([0.123456789121212,2,3], dtype=np.float16)
print("16bit: ", a[0])

a = np.array([0.123456789121212,2,3], dtype=np.float32)
print("32bit: ", a[0])

b = np.array([0.123456789121212121212,2,3], dtype=np.float64)
print("64bit: ", b[0])
Run Code Online (Sandbox Code Playgroud)
  • 16 位:0.1235
  • 32 位:0.12345679
  • 64 位:0.12345678912121212


Gur*_*tap 29

float32 是一个 32 位数字 - float64 使用 64 位。

这意味着 float64 占用两倍的内存——并且在某些机器架构中对它们进行操作可能会慢很多。

但是,float64 可以比 32 位浮点数更准确地表示数字。

它们还允许存储更大的数字。

对于您的 Python-Numpy 项目,我相信您知道输入变量及其性质。

为了做出决定,我们作为程序员需要问自己

  1. 我的输出需要什么样的精度?
  2. 速度根本不是问题吗?
  3. 百万分之几需要多少精度?

一个简单的例子是,如果我将我所在城市的天气数据存储为 [12.3, 14.5, 11.1, 9.9, 12.2, 8.2]

第二天预测输出可能是 11.5 或 11.5164374

您认为有必要存储 float 32 或 float 64 吗?

  • 如果我只对 [-9.999999, 9.999999] 范围内的数字感兴趣并且不关心小数点后第 6 位以外的数字(我实际上更喜欢总是将它们舍入并强制为零,但我知道这不是可能因为二进制浮点格式不能在不添加一些不起眼的余数的情况下表示一些小数)我可以使用 float16 或 float 32 还是必须使用 float64? (2认同)