在某些情况下,C编译器不能从浮点表达式中提出公共的子表达式,因为这意味着相当于对表达式重新排序。
然而编译器在提取公共子表达式前不能按照代数的等价关系重新安排表达式。这时,程序员需要手动地提出公共的子表达式。
不好的代码:
float a, b, c, d, e, f;
...
e = b * c / d;
f = b / d * a;
推荐的代码:
float a, b, c, d, e, f;
...
const float t = (b / d);
e = c * t;
f = a * t;
另一个例子,不好的代码:
float a, b, c, e, f;
...
e = a / c;
f = b / c;
推荐的代码:
float a, b, c, e, f;
。。。
const float t = (1.0f / c);
e = a * t;
f = b * t;
|