【问题标题】:How to raise a number to a power?如何将数字提高到幂?
【发布时间】:2018-12-14 23:06:33
【问题描述】:

我试图使用插入符运算符 (^) 将整数的幂次方提升,但我得到了令人惊讶的结果,例如:

assert_eq!(2^10, 8);

如何在 Rust 中执行幂运算?

【问题讨论】:

    标签: rust operators exponentiation


    【解决方案1】:

    位移是处理这种特殊情况的好方法:

    assert_eq!(1 << 10, 1024);
    

    【讨论】:

      【解决方案2】:

      这是您可以使用的最简单的方法:

      let a = 2; // Can also explicitly define type i.e. i32
      let a = i32::pow(a, 10);
      

      会输出“2的10次方”,即:

      1024

      【讨论】:

        【解决方案3】:

        Rust 通过方法 powchecked_pow 提供求幂。后者 防止溢出。因此,要将 2 提高到 10 次方,请执行以下操作:

        let base: i32 = 2; // an explicit type is required
        assert_eq!(base.pow(10), 1024);
        

        插入符号运算符^ 不用于求幂,它是bitwise XOR operator

        【讨论】:

        • 这是2 &lt;&lt; 9优化的吗?
        • @Stargateur 在这种情况下,编译器会优化整个操作,但当基数未知时,它看起来不像:godbolt
        • 刚刚尝试将此作为常量的一部分并得到错误,即它在常量中使用不稳定。把它拿出来以防其他人也在尝试。我在rustc 1.54.0 (a178d0322 2021-07-26)
        【解决方案4】:

        我正在尝试与 OP 相同的事情。感谢其他答案作者。

        这是一个适合我的变体:

        let n = 2u32.pow(10);
        

        这使用literal unsigned 32 bit integer 来设置类型和基数,然后在其上调用pow() 函数。

        【讨论】:

          【解决方案5】:

          对于整数:

          fn main() {
             let n = u32::pow(2, 10);
             println!("{}", n == 1024);
          }
          

          对于花车:

          fn main() {
             // example 1
             let f = f32::powf(2.0, 10.0);
             // example 2
             let g = f32::powi(2.0, 10);
             // print
             println!("{}", f == 1024.0 && g == 1024.0);
          }
          

          或者,由于你的基数是 2,你也可以使用 shift:

          fn main() {
             let n = 2 << 9;
             println!("{}", n == 1024);
          }
          

          【讨论】:

            猜你喜欢
            • 2015-11-17
            • 2016-03-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-09-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多