使用随机暂停来分析我在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);
}
我相信它足够有效。不过,欢迎提出任何意见。
答案 0 :(得分:1)
我与exp
,log
等功能遇到了同样的问题。
我不希望能够加快功能,但我确实试着看看我是否可以减少它们。
对于exp
,是否可以在日志空间中工作?
对于他们所有人来说,真正有用的方法是,因为我可以看到他们经常被同一个地方的同一个参数调用(这是你可以通过随机暂停看到的),所以记住它们是有意义的。
我只是将exp
包裹在另一个功能中
double exp_cached(double arg, double& old_arg, double& old_val)
。
如果arg
等于old_arg
,请返回old_val
。
如果没有,请致电exp
并设置old_arg
和old_val
。
这项技术有很多变化。