整数的 astype float32 与 float64 中的错误

jse*_*uer 5 python floating-point numpy python-2.7

我确信这是由于我对不同精度的浮点数之间的转换如何工作的理解上的失误,但有人可以解释为什么该值在 32 位与 64 位表示中被转换为比其真实值小 3 的值吗?

>>> a = np.array([83734315])
>>> a.astype('f')
array([ 83734312.], dtype=float32)
>>> a.astype('float64')
array([ 83734315.])
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 4

32 位浮点数可以精确表示大约 7 个十进制数字的尾数。您的数字需要更多,因此无法准确表示。

发生的机制如下:

32 位浮点数有 24 位尾数。您的数字需要 27 位才能准确表示,因此最后三位将被截断(设置为零)。您的数字的最低三位是0112;这些被设置为0002。观察0112310