如何将数字提高到幂?
Posted
技术标签:
【中文标题】如何将数字提高到幂?【英文标题】:How to raise a number to a power? 【发布时间】:2018-12-14 23:06:33 【问题描述】:我试图使用插入符运算符 (^
) 将整数的幂次方提升,但我得到了令人惊讶的结果,例如:
assert_eq!(2^10, 8);
如何在 Rust 中执行幂运算?
【问题讨论】:
【参考方案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 通过方法 pow
和 checked_pow
提供求幂。后者
防止溢出。因此,要将 2 提高到 10 次方,请执行以下操作:
let base: i32 = 2; // an explicit type is required
assert_eq!(base.pow(10), 1024);
插入符号运算符^
不用于求幂,它是bitwise XOR
operator。
【讨论】:
这是2 << 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);
https://doc.rust-lang.org/std/primitive.f32.html#method.powf
https://doc.rust-lang.org/std/primitive.f32.html#method.powi
https://doc.rust-lang.org/std/primitive.u32.html#method.pow
【讨论】:
以上是关于如何将数字提高到幂?的主要内容,如果未能解决你的问题,请参考以下文章