使用Python+Numpy,它可能在这里和那里进行了优化,因此不可能真正地对log(1+x)与{}进行基准测试。
所以我搬到了C++。在
结果:Time per operation with log: 19.57 ns
Time per operation with order-2 Taylor expansion of log: 3.73 ns
所以大概是x5因子!在#include
#include
#include
#define N (1000*1000*100)
#define NANO (1000*1000*1000)
int main()
{
float *x = (float*) malloc(N * sizeof(float));
float y;
float elapsed1, elapsed2;
clock_t begin, end;
int i;
for (i = 0; i < N; i++)
x[i] = (float) (rand() + 1) / (float)(RAND_MAX);
begin = clock();
for (i = 0; i < N; i++)
y = logf(x[i]);
end = clock();
elapsed1 = float(end - begin) / CLOCKS_PER_SEC / N * NANO;
begin = clock();
for (i = 0; i < N; i++)
y = x[i] + 0.5 * x[i] * x[i];
end = clock();
elapsed2 = float(end - begin) / CLOCKS_PER_SEC / N * NANO;
std::cout << "Time per operation with log: " << elapsed1 << " ns\n";
std::cout << "Time per operation with order-2 Taylor epansion: " << elapsed2 << " ns";
free(x);
}