如何处理大数并跳过“尝试添加溢出”错误?

问题描述 投票:0回答:1

我编写了一个 Rust 程序来查找斐波那契数。它适用于较小的数字,但对于较大的数字,它会过早退出:

fn fib(n: u8) -> u64 {
    let mut prev: u64 = 0;
    let mut curr: u64 = 1;
    
    for _ in 1..n {
        let next = prev + curr;
        prev = curr;
        curr = next;
    }
    
    curr
}

fn main() {
    for n in 1..95 {
        let curr = fib(n);
        println!("fibonacci {} is {}", n, curr);
    }
}

“fibonacci 93 ...”后的输出显示:

thread 'main' panicked at src/main.rs:6:20:
attempt to add with overflow
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

如何让它适用于大量数据?我们可以使用智能盒指针在堆上存储大量数字吗?

rust fibonacci integer-overflow
1个回答
3
投票

如何让它适用于大量数据?

你必须使用“bignum”类型的库(无法帮助你选择一个,因为我对景观一无所知)。

我们可以使用智能盒指针在堆上存储大量数字吗?

你可以,但如果你仍然使用固定大小的整数,这不会改变任何东西:u64 是 64 位,仅此而已。 fib(94) 需要 65 位,因此无法容纳。如果您只想运行到 fib(95),您可以使用 u128,它可以一直工作到

fib(186)
(包含)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.