繁体   English   中英

"<i>Can compilers (specifically rustc) really simplify triangle-summation to avoid a loop?<\/i>编译器(特别是 rustc)真的可以简化三角求和以避免循环吗?<\/b> <i>How?<\/i>如何?<\/b>"

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM