我怎样才能允许Rust对超过128位的数字执行操作?

dfddblmv  于 2022-12-26  发布在  其他
关注(0)|答案(1)|浏览(179)

我写了一些简单的代码来生成斐波那契数列,在一个for循环中从32位变量开始,到64 then,128位,我不能用128位来超过182代,有没有办法重写这个代码来超过这个限制?
此代码只能生成182次迭代

fn main() {

  let mut in1: i128 = 1;
  let mut in2: i128 = 1;
  let mut op1: i128;

  for iterations in 0..183 {
  //add the given numbers
    op1 = in1 + in2;
  //print the result
    println!("{}: {}", iterations + 1, op1);
  //prepare the next iterations
    in1 = in2;
    in2 = op1;
    //repeat
  }

}

如果给出的生成数超过182,则此代码将给予以下错误
“main”在“尝试添加溢出”时死机“

3bygqnnd

3bygqnnd1#

除了i128之外没有默认的数据类型,但是有一些大型的整数库,允许任意位数。
例如,num_bigint::BigIntnum的一个子机箱,在编写最成熟的大整数库时(据我所知):

use num_bigint::BigInt;

fn main() {
    let mut in1: BigInt = 1.into();
    let mut in2: BigInt = 1.into();
    let mut op1: BigInt;

    for iterations in 0..183 {
        //add the given numbers
        op1 = in1 + &in2;
        //print the result
        println!("{}: {}", iterations + 1, op1);
        //prepare the next iterations
        in1 = in2;
        in2 = op1;
        //repeat
    }
}
...
179: 30010821454963453907530667147829489881
180: 48558529144435440119720805669229197641
181: 78569350599398894027251472817058687522
182: 127127879743834334146972278486287885163
183: 205697230343233228174223751303346572685
    • 注意事项:**

虽然num_bigint::BigInt是最成熟的库,但它还远远不是最快的库。
更多信息:https://crates.io/crates/bigint-benchmark
但是,请注意,最快的库不是MIT/Apache-2.0许可的。

相关问题