我想用C编写函数,以秒和纳秒作为输入。将秒和纳秒转换为微秒,返回以微秒为单位的总数。
unsigned long long get_microseconds(int seconds, unsigned long long nSeconds);现在,转换非常琐碎。我可以用下面的公式-
mSeconds =秒*1000000+n秒/1000(纳秒转换的精度损失是可以的,我的计时器至少有100微秒的分辨率)
在不使用乘法和除法操作符的情况下实现这个方程的最快方法是获得最好的精度和最少的cpu周期。
编辑:我在一个基于GNU的定制DSP上运行,但是定制了工具链。我没有真正测试算术运算的性能,我只是想知道它是否会影响算法的性能,以及是否有改进的方法。
发布于 2016-06-27 22:31:17
return Seconds*1000000 + nSeconds/1000;如果有任何值得做的位移位或其他位操作,您的编译器可能会处理它。
发布于 2016-06-27 22:37:21
编译器几乎肯定会尽可能地优化乘法。当除以1000时,它不会做的是“接受一个小损失”,所以您可能会发现会发现它写得更快一些。
return Seconds*1000000 + nSeconds/1024; /* Explicitly show the error */...keeping记住,nSeconds不能增长太多,否则错误可能会变得不可接受。
但无论你做什么,都会测试的结果--速度和准确性都高于实际输入。还探索将函数转换为宏并将调用全部保存起来。坦率地说,对于如此简单的计算,几乎没有比优化编译器更好的机会了。
同时,在全局算法的范围内考虑这种优化的权重。这个函数的调用频率是否真的达到了它节省下来的钱是值得的
https://stackoverflow.com/questions/38064188
复制相似问题