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
60KB
1.5K SLoC
固定BigInt
基于固定大小数组的无符号大整数实现。
重要:需要至少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_std
和no_alloc
环境编写的,具有可选的无panic操作,即嵌入式MCU。至少目前,重点是首先确保正确性,然后是生成的代码大小,性能最后考虑。目的是不要在32位CPU上引入64位数学依赖,以节省代码空间。
算术运算符(+,-,.add())在溢出时将引发panic,就像本地整数类型一样。支持无panic的替代方案,如overflowing_add
和wrapping_add
。
除了基本算术外,还实现了两个主要特质:num_traits::PrimInt和num_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