我确定这是由于我对不同精度浮点数之间的转换工作方式的理解有误,但是有人可以解释为什么在 32 位和 64 位表示中,该值被转换为比其真实值少 3 的原因吗?

>>> a = np.array([83734315])
>>> a.astype('f')
array([ 83734312.], dtype=float32)
>>> a.astype('float64')
array([ 83734315.])

最佳答案

32-bit float 可以精确表示大约 7 位十进制数字的尾数。您的号码需要更多,因此无法准确表示。

发生的机制如下:

32 位浮点数具有 24 位尾数。您的数字需要精确表示 27 位,因此最后三位被截断(设置为零)。数字的最低三位是 011 2;这些被设置为 000 2。观察到 011 2 是 3 10。

关于python - 整数的 astype float32 vs float64 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19862686/

10-11 12:29