[英]Can compilers (specifically rustc) really simplify triangle-summation to avoid a loop? How?
在 Blandy 和 Orendorff 的Programming Rust第 322 页上是这样的声明:
...Rust...认识到有一种更简单的方法可以将数字从 1 加到
n
:总和始终等于n * (n+1) / 2
。
这当然是一个众所周知的等价,但是编译器是如何识别它的呢? 我猜它是在 LLVM 优化过程中,但是 LLVM 是否以某种方式从第一原理推导出等价,或者它只是有一些可以简化为算术运算的“公共循环计算”?
首先,让我们证明这确实发生了。
从此代码开始:
pub fn sum(start: i32, end: i32) -> i32 {
let mut result = 0;
for i in start..end {
result += i;
}
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.