看下面这段代码:
import numpy as np
import timeit
print('close', timeit.Timer(lambda: np.log(0.99999999999999978)).timeit())
print('not close', timeit.Timer(lambda: np.log(0.99)).timeit()))
输出是:
close 4.462684076999722
not close 0.6319260000018403
怎么这么大(数量级)的运行时间差异?我错过了什么吗?
编辑:
更重要的是,我们看到价值放缓幅度小到:
1 – np.finfo(np.float).eps
但不是价值观
1 – np.finfo(np.float).eps * 10.
我的机器Python 3.5.2 | Anaconda 4.1.1(64位),带有numpy 1.11.1.
到目前为止,这已经在我身边的其他3台机器上重现了(2个Python 3.4 Anaconda安装,1个Python 2.7默认的Ubuntu安装).
其他一些用户也可以重现它,而其他用户则不能.看评论.
编辑2:
可能只在Linux系统上可重现.到目前为止,在Windows系统上无法重现.
最佳答案 在撰写本文时,大多数芯片组使用泰勒级数和特定预先计算的值表来评估日志.
对于泰勒级数,一个接近1的数字收敛的速度比远离1的数字慢.这可能在某种程度上解释了这里观察到的执行时间的差异.
0.99也可能更接近列表值之一,这也会有所帮助.
或者您的观察结果甚至可能无统计学意义.