5 个版本
0.4.1 | 2024 年 1 月 12 日 |
---|---|
0.4.0 | 2023 年 9 月 12 日 |
0.3.2 | 2023 年 3 月 13 日 |
0.3.1 | 2022 年 12 月 8 日 |
0.3.0 | 2022 年 11 月 10 日 |
#882 in 数学
每月 1,370 次下载
用于 17 个 Crates (2 个直接使用)
1MB
23K SLoC
dashu-ratio
作为 dashu 库的一部分,实现任意精度的理性数。请参阅 Docs.rs 获取完整文档。
特性
- 支持
no_std
并使用纯 Rust 编写。 - 支持用于快速计算的理性数的宽松版本。
- 支持浮点数的丢番图逼近。
- 小分子和分母的理性数在栈上内联。
- 以 2~36 为基数的高效整数解析和打印。
- 提供对浮点数的开发者友好调试打印。
可选依赖
std
(默认): 启用对依赖项的std
支持。
性能
相关的基准测试将在 内置基准测试 中实现。
许可
请参阅 顶级 README。
lib.rs
:
高性能的大理性库。
该库使用纯 Rust 实现了高效的算术和转换函数。
主要有两种理性数类型 [RBig] 和 [Relaxed]。它们都将理性数表示为整数对(分子和分母),并且它们的 API 大部分相同。然而,只有 [RBig] 才会减少分子和分母,使它们除了 1 以外没有公约数。因此,如果不需要对理性数进行约简表示,[Relaxed] 有时可能会更快。但是,在选择使用哪种表示之前,始终建议进行基准测试。
要从字面量构造大理性数,请使用 dashu-macro
crate 以便您更方便。
示例
use dashu_int::{IBig, UBig};
use dashu_ratio::{RBig, Relaxed};
let a = RBig::from_parts((-12).into(), 34u8.into());
let b = RBig::from_str_radix("-azz/ep", 36).unwrap();
let c = RBig::try_from(3.1415926f32).unwrap(); // c = 6588397 / 2097152 (lossless)
let c2 = RBig::simplest_from_f32(3.1415926).unwrap(); // c2 = 51808 / 16491
assert_eq!(c2.numerator(), &IBig::from(51808));
assert_eq!(c.to_string(), "6588397/2097152");
let d = RBig::simplest_from_f32(22./7.).unwrap();
assert_eq!(d.to_string(), "22/7"); // round trip to the original literal
// for Relaxed, only the common divisor 2 is removed
let e: Relaxed = "-3228/1224".parse()?; // d = -807 / 306
assert_eq!(e.numerator(), &IBig::from(-807));
let f: RBig = e.clone().canonicalize(); // e = -269 / 102
assert_eq!(f.numerator(), &IBig::from(-269));