[英]Error in astype float32 vs float64 for integer
我确信这是由于我对如何在不同的浮点精度之间进行投射的理解失效,但是有人可以解释为什么在32比64位表示中,该值的变为低于其真实值的3?
>>> a = np.array([83734315])
>>> a.astype('f')
array([ 83734312.], dtype=float32)
>>> a.astype('float64')
array([ 83734315.])
32位浮点数可以精确地表示尾数的约7个十进制数字。 您的号码需要更多,因此无法准确表示。
发生的机制如下:
32位浮点数具有24位尾数。 您的数字需要精确表示27位,因此最后三位被截断(设置为零)。 你的号码的三个最低位是011
2 ; 这些都设定为000
2 。 观察到011
2是3
10 。
float32
只有24位有效位精度,大约是7位数(log10(2 ** 24)= 7.22)。 您希望它能准确存储一个8位数字,这通常是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.