C中round(),exp()和drand48_r()的高效实现

时间:2015-03-12 12:08:15

标签: c performance profiling

使用随机暂停来分析我在C中的多线程应用程序,我注意到exp()drand48_r()在堆栈中弹出很多。

这些功能还有其他实现吗?至于exp()我在这里找到了答案,但没有人在C中测试过,我不确定C ++的转换是否直截了当。

round()也出现了,我目前正在使用它:

int roundI(double x)
{
    if (x < 0.0)
        return (int)(x - 0.5);
    else
        return (int)(x + 0.5);
}

我相信它足够有效。不过,欢迎提出任何意见。

1 个答案:

答案 0 :(得分:1)

我与explog等功能遇到了同样的问题。

我不希望能够加快功能,但我确实试着看看我是否可以减少它们。

对于exp,是否可以在日志空间中工作?

对于他们所有人来说,真正有用的方法是,因为我可以看到他们经常被同一个地方的同一个参数调用(这是你可以通过随机暂停看到的),所以记住它们是有意义的。 我只是将exp包裹在另一个功能中 double exp_cached(double arg, double& old_arg, double& old_val)
如果arg等于old_arg,请返回old_val。 如果没有,请致电exp并设置old_argold_val

这项技术有很多变化。