5个版本
0.2.0 | 2023年6月13日 |
---|---|
0.1.3 | 2023年4月16日 |
0.1.2 | 2023年4月15日 |
0.1.1 | 2023年4月15日 |
0.1.0 | 2023年4月15日 |
#1294 in 编码
用于 2 个crates (通过 numera)
280KB
6K SLoC
decstr
: IEEE 754十进制比特串
此库实现了一个纯Rust中的IEEE 754十进制浮点兼容编码。它旨在以一致和可移植的方式支持任意精度数字的交换和存储。
此库不实现十进制算术。它仅支持转换。
源代码编写得可供任何对了解IEEE 754十进制浮点标准感兴趣的人探索,并可由任何希望根据自己的需求修改实现部分的人修改。
入门
将 decstr
添加到您的 Cargo.toml
[dependencies.decstr]
version = "0.2.0"
任何Rust原始数值类型都可以编码为 Bitstring
let decimal = decstr::Bitstring::from(123.44);
// 123.44
println!("{}", decimal);
// [196, 73, 48, 34]
println!("{:?}", decimal.as_le_bytes());
Bitstring
类型选择可以容纳给定值的最小编码大小
let small = decstr::Bitstring::from(1u8);
let large = decstr::Bitstring::from(u128::MAX);
assert_eq!(4, small.as_le_bytes().len());
assert_eq!(20, large.as_le_bytes().len());
当启用 arbitrary-precision
功能时,可以编码任何大小的十进制数字
let decimal = decstr::BigBitstring::try_parse_str(include_str!("pi-to-500-places.txt"))?;
// 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912
println!("{}", decimal);
// [156, 105, 19, 152, 15, 187, 139, 242, 164, 92, 245, 58, 83, 59, 247, 116, 121, 126, 147, 145, 13, 115, 25, 41, 100, 249, 132, 181, 11, 238, 17, 99, 148, 216, 54, 191, 214, 107, 195, 233, 133, 53, 7, 78, 52, 218, 108, 77, 33, 46, 82, 27, 225, 16, 21, 83, 204, 18, 128, 13, 89, 61, 111, 163, 173, 241, 36, 216, 170, 74, 122, 232, 32, 141, 147, 29, 99, 27, 51, 216, 128, 99, 41, 223, 41, 156, 146, 96, 58, 120, 185, 181, 64, 182, 140, 69, 180, 65, 131, 113, 58, 115, 77, 46, 167, 154, 128, 114, 170, 101, 120, 227, 215, 18, 185, 77, 75, 76, 220, 174, 230, 238, 241, 128, 144, 250, 224, 176, 227, 135, 90, 137, 201, 110, 181, 144, 112, 181, 11, 92, 16, 162, 80, 124, 36, 46, 114, 196, 76, 173, 242, 140, 132, 69, 183, 96, 42, 151, 56, 217, 48, 161, 22, 181, 11, 20, 121, 111, 120, 68, 180, 170, 216, 16, 91, 127, 128, 140, 50, 208, 139, 195, 148, 165, 150, 123, 168, 10, 105, 239, 191, 89, 158, 161, 83, 220, 156, 134, 27, 89, 76, 143, 246, 59, 118, 101, 101, 67, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34]
println!("{:?}", decimal.as_le_bytes());
状态
此库相当新。它功能正常,但未优化,可能包含错误。
IEEE 754
如果您曾经使用过Rust的 f64
、C#的 double
或JavaScript的 Number
,您就已经在使用IEEE 754二进制(基数2)浮点的实现。该标准的最新版本也指定了十进制(基数10)浮点格式。它们并不像二进制格式那样普遍,但本身也很有趣。
如果您无法访问IEEE 754标准的副本,您可以查看兼容IEEE 754的开放标准通用十进制算术。它。
依赖关系
~190KB