小编Joh*_*chs的帖子

Numpy浮点舍入错误

在搜索一些numpy的东西时,我遇到了一个讨论numpy.dot()的舍入精度的问题:

Numpy:点(a,b)和(a*b)之间的差异.sum()

因为我碰巧有两台(不同的)计算机和Haswell-CPU坐在我的桌子上,那应该提供FMA和一切,我想我会在第一个答案中测试Ophion给出的例子,我得到的结果让我感到有些惊讶:

在更新/安装/修复lapack/blas/atlas/numpy后,我在两台机器上都得到以下内容:

>>> a = np.ones(1000, dtype=np.float128)+1e-14
>>> (a*a).sum()
1000.0000000000199999
>>> np.dot(a,a)
1000.0000000000199948

>>> a = np.ones(1000, dtype=np.float64)+1e-14
>>> (a*a).sum()
1000.0000000000198
>>> np.dot(a,a)
1000.0000000000176
Run Code Online (Sandbox Code Playgroud)

所以标准乘法+ sum()比np.dot()更精确.但是timeit确认.dot()版本对于float64和float128来说都更快(但并不多).

任何人都可以为此提供解释吗?

编辑:我不小心删除了numpy版本的信息:1.9.0和1.9.3与python 3.4.0和3.4.1相同的结果.

python precision numpy

12
推荐指数
1
解决办法
1065
查看次数

标签 统计

numpy ×1

precision ×1

python ×1