我创建了一个numpy为a = numpy.arange(0,1e5,1,dtype=int)
的数组。 a[18645]
正如预期的那样是18645。当我创建另一个数组b=a*10e-15
时,b[18645]
为186.4999999999e-12。 b[18644]
是186.44e-12。为什么Python会创建这些尾随9?
当我尝试使用numpy.where
搜索数组中的元素时,出现了此问题。使用尾随9,numpy.where
函数无法在b
中找到184.45e-12。
答案 0 :(得分:5)
那是因为它正在转换为浮点数,这不是精确的。由于舍入错误,你获得的结果不是186.44 - 它显然是略低于186.5的数字,因此所有9个都被打印出来。
这里实际上有几个错误来源。首先,1e-15不能完全表示为浮点。其次,乘法可能会引入更多错误。最后,结果必须转换回十进制,但它有助于在打印时截断结果。
一些琐事 - 1e-15转换为双精度正好是0.000000000000000000000000000000007770539987666107923830718560119501514549256171449087560176849365234375
将此数字乘以18644得出0.0000000000186440000000000017406180102322435293213387375033107673516497015953063 96484375
正如您所看到的,这仍然相当准确。似乎Numpy正在使用单个浮点数,这会以指数方式放大错误。
答案 1 :(得分:0)