【问题标题】:Error in astype float32 vs float64 for integerastype float32 与 float64 的整数错误
【发布时间】:2013-11-08 23:49:15
【问题描述】:
我确信这是由于我对浮点数的不同精度之间的转换如何工作的理解上的失误,但有人可以解释为什么在 32 位和 64 位表示中该值比其真实值小 3 吗?
>>> a = np.array([83734315])
>>> a.astype('f')
array([ 83734312.], dtype=float32)
>>> a.astype('float64')
array([ 83734315.])
【问题讨论】:
标签:
python
python-2.7
numpy
floating-point
【解决方案1】:
32-bit float 可以精确地表示尾数的大约 7 个十进制数字。您的数字需要更多,因此无法准确表示。
发生的机制如下:
32 位浮点数具有 24 位尾数。您的数字需要 27 位才能准确表示,因此最后三位被截断(设置为零)。您的号码的最低三位是0112;这些设置为0002。观察0112 是310。
【解决方案2】:
float32 只有 24 位有效位精度,大约为七位数 (log10(2**24) = 7.22)。您希望它准确地存储一个 8 位数字,这通常是不可能的。