-1

我正在研究 C 代码优化,并且有许多计算将 1.0 添加到返回双精度值的表达式中,例如

val =  1.0 + u[8] / c_sq + (u[8] * u[8]) / (2.0 * c_sq * c_sq) - u_sq / (2.0 * c_sq)

所以我只是想知道是否有任何优化技术来改进这段代码。

4

2 回答 2

4

那一行代码,在没有任何上下文的情况下自行获取,就是它。只要您使用的编译器至少2.0 * c_sq. 否则,这几乎是您在特定领域优化之外所能做的所有事情,而这些优化并不是仅仅通过该代码就可以看到的。

于 2013-10-24T00:53:40.933 回答
2

在典型的当前处理器上,除法是耗时的;它可能需要几十个 CPU 周期。根据这个答案,您可以重新排列表达式以消除两个部门。您还可以进行一些其他小的改进(编译器可能已经发现):

double t = u[8];
double v = 2*c_sq;

val = 1 + (t*(v+t) - u_sq*c_sq) / (v*c_sq);
于 2013-10-24T02:00:31.870 回答