任何人都可以使用loop invariant
提供一个复杂的示例sum(int n)
这样的示例是如此微不足道,以至于无法显示loop invariant
的强大功能。我想要一个不那么明显的例子,我们可以使用像loop invariant
这样的方法来解决它。
答案 0 :(得分:2)
Wikipedia示例非常好:
for (int i = 0; i < n; i++) {
x = y + z;
a[i] = 6 * i + x * x;
}
可以移动两个不变量(y + z和x * x)。此示例的优点是,在应用LICM之后,您可以对代码应用其他优化以使某些操作非常简单。
关于这方面的论文/幻灯片/课程有很多,你肯定能找到一个令人满意的例子。