#大整数 #大数 #数值 #const泛型 #无符号整数

无需std fixed-bigint

Rust的固定大小大整数实现

10个版本

0.1.9 2022年5月19日
0.1.8 2021年12月7日
0.1.7 2021年10月12日
0.1.5 2021年4月17日

数学类别的第1160位

每月下载量:21

Apache-2.0

60KB
1.5K SLoC

固定BigInt

crate documentation minimum rustc 1.51 build status Coverage Status

基于固定大小数组的无符号大整数实现。

重要:需要至少Rust 1.51稳定版本,因为它使用了min_const_generics

FixedUInt<u8,4>FixedUInt<u16,2>FixedUInt<u32,1>都创建了一个32位无符号整数,其行为与内置的u32基本相同。FixedUInt<u32, 64>创建了一个2048位的值,它使用本地32位数学。如果在8位CPU上运行,FixedUInt<u8, 2048>将以相同的方式工作,但速度要慢得多。

该库是为no_stdno_alloc环境编写的,具有可选的无panic操作,即嵌入式MCU。至少目前,重点是首先确保正确性,然后是生成的代码大小,性能最后考虑。目的是不要在32位CPU上引入64位数学依赖,以节省代码空间。

算术运算符(+,-,.add())在溢出时将引发panic,就像本地整数类型一样。支持无panic的替代方案,如overflowing_addwrapping_add

除了基本算术外,还实现了两个主要特质:num_traits::PrimIntnum_integer::Integer

待办事项列表:

  • 实现实验性的unchecked_math运算符,如unchecked_mul、unchecked_div等。
  • 可能需要其自己的错误结构体,而不是重用core::fmt::Error和core::num::ParseIntError
  • 十进制字符串转换,目前仅支持二进制和十六进制字符串。
  • 全面测试夹具,全面验证所有操作与原生类型的32位兼容性
  • 一些测试代码依赖于64位的ToPrimitive/FromPrimitive转换,需要清理这些代码
  • 许多测试代码可以编写得更简洁
  • 也许还可以实现有符号版本。

注意: 此crate主要作为一个学习Rust类型系统的练习,以及了解它在微控制器上运行效果如何的练习,对任何特定用途或质量的适用性或质量保证为零。

贡献

有关详细信息,请参阅CONTRIBUTING.md

许可

Apache 2.0;有关详细信息,请参阅LICENSE

免责声明

本项目不是官方Google项目。Google不支持此项目,并且Google特别声明不对其实际质量、可销售性或特定用途的适用性做出任何保证。

依赖关系

~205KB