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 数学

Download history 478/week @ 2024-03-13 600/week @ 2024-03-20 577/week @ 2024-03-27 1016/week @ 2024-04-03 985/week @ 2024-04-10 765/week @ 2024-04-17 684/week @ 2024-04-24 793/week @ 2024-05-01 279/week @ 2024-05-08 353/week @ 2024-05-15 321/week @ 2024-05-22 341/week @ 2024-05-29 302/week @ 2024-06-05 321/week @ 2024-06-12 444/week @ 2024-06-19 251/week @ 2024-06-26

每月 1,370 次下载
用于 17 Crates (2 个直接使用)

MIT/Apache

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));

依赖项