如何优化c中的双增量?

时间:2013-10-24 00:43:42

标签: c performance

我正在进行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 :(得分:4)

这一行代码在没有任何上下文的情况下自行采用,就是它的本质。只要您使用的编译器至少在2.0 * c_sq上执行CSE,就无法进一步优化它。否则,除了特定于域的优化之外,您几乎可以做到这一切。仅仅通过该代码就不会显而易见。

答案 1 :(得分:2)

在典型的当前处理器上,划分非常耗时;它可能需要几十个CPU周期。您可以重新排列表达式,以消除每this answer个两个分区。您也可以进行一些小的其他改进(编译器可能已经捕获):

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

val = 1 + (t*(v+t) - u_sq*c_sq) / (v*c_sq);