45 个版本

使用旧的 Rust 2015

0.7.0 2022 年 4 月 23 日
0.6.0 2021 年 6 月 2 日
0.5.9 2020 年 8 月 14 日
0.5.8 2020 年 7 月 19 日
0.1.6 2015 年 6 月 24 日

#333算法

Download history 51/week @ 2024-03-11 54/week @ 2024-03-18 43/week @ 2024-03-25 206/week @ 2024-04-01 27/week @ 2024-04-08 48/week @ 2024-04-15 42/week @ 2024-04-22 35/week @ 2024-04-29 36/week @ 2024-05-06 45/week @ 2024-05-13 56/week @ 2024-05-20 47/week @ 2024-05-27 31/week @ 2024-06-03 30/week @ 2024-06-10 29/week @ 2024-06-17 37/week @ 2024-06-24

132 次每月下载
6 个 包中使用

Apache-2.0

330KB
9K SLoC

已弃用

该包已不再维护。

幸运的是,有很多替代方案可以使用 ramp。感谢美好的时光 :`)

RAMP - 多精度 Rust 算术

Build Status Docs

Ramp 是一个高性能的多精度(也称为“大数”)库,用于处理超出常规处理能力的数字。使用非常简单,你几乎可以像使用常规数字一样使用它们。

示例


extern crate ramp;
use ramp::Int;

// Calculates n!
fn factorial(n: usize) -> Int {
   let mut a = Int::from(1);

   for i in 2..n {
       a *= i;
   }

   return a * n;
}

如你所见,处理这些数字非常简单。

已提供按值传递和按引用传递的运算符重载,后者消耗操作数但不消耗引用。按值传递的重载将尝试重用结果空间(这并不总是可能的)。

还提供了针对 i32usize 的运算符重载,允许在处理较小数字时进行简单(且高效)的操作。上面的示例实际上使用了 usize 重载,这意味着只分配了一个 Int

注意 由于使用了不稳定特性(特别是内联汇编),Ramp 只能用 rustc 的夜间构建来编译。

为什么还需要另一个库?

num 包提供了一些可以使用的 大数 类型,所以为什么还要使用 Ramp?嗯,Ramp 专门关注多精度算术,而 num 是一个通用数值库,恰好提供了某些多精度算术功能。

如果你不能使用不稳定的 Rust 特性或只是想要一些功能,请使用 num。当你需要高性能和额外功能时,应使用 Ramp。

总体设计

Ramp 被分为两个主要部分:高级代码和低级代码。你应该使用高级代码,但是真正的操作是在低级代码中完成的。

低级例程(在 ll 中)主要是与原始指针一起工作的不安全函数,其中一些例程使用内联汇编来实现,以访问特定于处理器的功能。

肢体

“肢体”一词在Ramp中经常使用。这是一个从GMP借用的术语,代表Ramp工作在的基础数字。由于基础等于2^word_size,这些“数字”非常大,因此使用“肢体”一词。

未来工作

Ramp目前非常粗糙且不完整。从广义上讲,Ramp旨在提供三种类型:整数、有理数和浮点数。整数(Int)已经存在并且基本完整,有理数已经存在并且有基本实现。浮点数尚未实现。

在底层例程中,有一些操作目前使用最简单的有效算法实现,尤其是乘法和除法。虽然这对相对较小的数字来说是足够的,但更大的数字应该使用更好的算法。

依赖项

~0.5–0.8MB
~15K SLoC