现代编译器可以优化x - y> 0到x> ÿ?

时间:2017-10-01 20:43:38

标签: compare compiler-optimization

我和朋友讨论了一些代码,这个概念出现了。我们还没有人接受过编译器,我们假设x > y执行得更快。但后来我开始怀疑编译器是否会最终优化x - y > 0(实际上,因为我们讨论的是Python代码,解释器)。

我的理解是,由于额外的算术步骤,未经优化的x - y > 0计算时间比x > y要长,但我想这两个表达式在功能上是等价的。

1 个答案:

答案 0 :(得分:0)

在决定是否将x - y > 0翻译为x > y时,需要考虑许多因素。首先,x > y不一定比x - y > 0快。在许多处理器体系结构x > y中,通过计算x - y并检查处理器状态标志来实现,即x > yx - y > 0同样快。其次,为了能够执行转换,前后的表达式必须是等价的,并且根据关于过流和欠流的语义,这两个表达式不一定是这种情况。

例如在C中,转换对签名类型有效,因为签名表达式的过度和不足流被认为是未定义的行为,即如果它发生则整个程序存在缺陷并且任何事情都会发生。这意味着对于所有有效程序,表达式是等效的,并且可以应用转换。对于无符号类型,一方面,所有尝试都包含在该类型的域中。这意味着x - y > 0非常简单而x > y不是,因此它不是有效的转换。