打印
[开发工具]

提取公共表达式快捷运算

[复制链接]
642|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jf101|  楼主 | 2024-6-27 22:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


在某些情况下,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;



使用特权

评论回复
沙发
kzlzqi| | 2024-7-29 15:30 | 只看该作者
C编译器可能无法优化浮点表达式以提出公共的子表达式,因为这涉及到重新排序表达式,这在浮点运算中可能导致精度上的差异。

使用特权

评论回复
板凳
范德萨发额| | 2024-7-29 15:41 | 只看该作者
在这个例子中,b / d 是一个公共子表达式,但编译器可能不会优化它。

使用特权

评论回复
地板
申小林一号| | 2024-7-29 22:41 | 只看该作者
感谢分享

使用特权

评论回复
5
纠结的那些年| | 2024-7-31 11:58 | 只看该作者
手动提取公共子表达式是一种优化技巧,可以减少重复计算,提高代码效率。

使用特权

评论回复
6
纠结的那些年| | 2024-7-31 11:59 | 只看该作者
在涉及浮点运算时,这种优化尤为重要,因为浮点运算的代数等价性在精度方面可能存在差异。

使用特权

评论回复
7
AdaMaYun| | 2024-7-31 12:48 | 只看该作者
确实习惯非常重要

使用特权

评论回复
8
kqh11a| | 2024-8-28 12:20 | 只看该作者
公共子表达式提取指的是将表达式中的重复计算提取出来,存储在临时变量中,然后在需要时使用这些临时变量。

使用特权

评论回复
9
花间一壶酒sd| | 2024-8-31 22:01 | 只看该作者
手动提取公共子表达式可以帮助提高代码的可读性并可能提高性能。

使用特权

评论回复
10
C编译器不能从浮点表达式中提出公共的子表达式,因为这意味着相当于对表达式重新排序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

231

主题

1538

帖子

2

粉丝