我正在研究 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)
所以我只是想知道是否有任何优化技术来改进这段代码。
我正在研究 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)
所以我只是想知道是否有任何优化技术来改进这段代码。
那一行代码,在没有任何上下文的情况下自行获取,就是它。只要您使用的编译器至少在2.0 * c_sq
. 否则,这几乎是您在特定领域优化之外所能做的所有事情,而这些优化并不是仅仅通过该代码就可以看到的。
在典型的当前处理器上,除法是耗时的;它可能需要几十个 CPU 周期。根据这个答案,您可以重新排列表达式以消除两个部门。您还可以进行一些其他小的改进(编译器可能已经发现):
double t = u[8];
double v = 2*c_sq;
val = 1 + (t*(v+t) - u_sq*c_sq) / (v*c_sq);