【发布时间】:2015-12-28 00:38:34
【问题描述】:
我一直在从 Matlab 切换到 IPython。 在 IPython 中,如果我们将 3.1 乘以 2.1,结果如下:
In [297]:
3.1 * 2.1
Out[297]:
6.510000000000001
有一个小的舍入误差。这不是一个大问题,但它有点烦人。我假设它是在将十进制数转换为二进制数时出现的,反之亦然,对吗?
但是,在 Numpy 数组中,结果是正确的:
>>> np.array([3.1 * 2.1])
array([ 6.51])
在Matlab命令行提示下,结果也是正确的:
>> 3.1 * 2.1
ans =
6.5100
上述 Python 中的舍入错误看起来很烦人。在 python 交互模式或 IPython 中是否有一些方法可以避免此错误?
【问题讨论】:
-
一般来说,如果你需要浮点精度,你应该只使用库,但你可以取出小数点,做乘法,然后将小数点插入到你的输出中。对于您的示例,您将执行 31*21=651,并且由于您将两个数字都乘以 10,并且 10*10 是 100,因此它变为 6.51
-
这不是一个四舍五入的错误。
ipython显示的小数点比其他两个打印件多。 -
@hpaulj 我会称它为舍入错误,因为 3.1 * 2.1 在正常数学中确实等于 6.51。从某种意义上说,你是对的,numpy 和 Python 浮点数之间的外观差异没有意义,尽管两者都受到这种不精确的影响。
标签: python numpy floating-point ipython