【发布时间】:2011-12-30 01:27:47
【问题描述】:
我们都知道逻辑表达式中的短路,即当
if ( False AND myFunc(a) ) then
...
不必费心执行myFunc(),因为if 条件不可能为真。
我很好奇你的日常代数方程是否有等价物,比如说
result = C*x/y + z
如果C=0 没有必要评估第一项。如果x 和y 是标量,那么在性能方面并没有多大关系,但是如果我们假装它们是大矩阵并且操作代价高昂(并且适用于矩阵),那么它肯定会有所作为。当然,您可以通过添加if C!=0 声明来避免这种极端情况。
所以我的问题是这样的功能是否存在,是否有用。我不是一个程序员,所以它可能以我没有遇到过的名字命名;如果是的话请赐教:)
【问题讨论】:
-
从功能的角度来看,逻辑短路是一个重要的概念,而“算术短路”只是编译器级别的优化,没有功能差异。您选择的语言可能已经在您不注意的情况下在幕后进行。
-
比我了解更多的人应该回答,但我想如果你把这个部门短路了,你会遇到问题。例如,如果 y=0,会发生什么?如果短路,当答案实际上是错误时,它将返回 0。
-
@deceze 算术短路确实有超出优化的功能差异,就像逻辑短路一样。考虑
result = C*myfunction()。如果C==0导致算术表达式短路,则永远不会调用myfunction,并且不会发生它可能产生的任何副作用(就像逻辑短路一样)。 -
理论上,如果您将一系列值相乘并遇到 0;你可以停在那里。我是否/真正的编译器如何实现这种优化。正如@Maxy-B 提到的,编译器必须确保没有副作用。
标签: language-agnostic short-circuiting arithmetic-expressions