astype float32和float64在整数转换中的错误

5

我相信这是因为我不理解在不同精度的浮点数之间进行强制转换的工作原理,但有人能解释一下为什么在32位和64位表示中,该值被强制转换为比其真实值少3吗?

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

4

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

发生的机制如下:

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


3

float32 只有 24 位有效数字,大约是七位数(log10(2**24) = 7.22)。你希望它能够精确地存储一个八位数,但一般情况下这是不可能的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接