30 个版本 (19 个稳定版)
1.0.18 | 2024年5月7日 |
---|---|
1.0.17 | 2024年2月19日 |
1.0.16 | 2023年12月9日 |
1.0.15 | 2023年7月15日 |
0.1.1 | 2018年7月28日 |
#17 在 值格式化
12,232,831 每月下载量
用于 52,000 个crate(154 个直接使用)
115KB
2K SLoC
Ryū
Ryū 的纯 Rust 实现,Ryū 是一种快速将浮点数转换为十进制字符串的算法。
PLDI'18 论文 Ryū: 快速浮点到字符串转换 由 Ulf Adams 编写,包括该算法的完整正确性证明。该论文可在 creative commons CC-BY-SA 许可下获取。
此 Rust 实现是 Ulf Adams 用 C 实现的逐行移植,https://github.com/ulfjack/ryu。
要求:此crate支持任何回到 rustc 1.36 的编译器版本;它不使用 Rust 标准库中的任何内容,因此可以从 no_std crate 中使用。
[dependencies]
ryu = "1.0"
示例
fn main() {
let mut buffer = ryu::Buffer::new();
let printed = buffer.format(1.234);
assert_eq!(printed, "1.234");
}
性能(越低越好)
您可以使用以下命令运行上游的基准测试
$ git clone https://github.com/ulfjack/ryu c-ryu
$ cd c-ryu
$ bazel run -c opt //ryu/benchmark:ryu_benchmark
使用以下命令对同一基准测试进行与我们的实现的比较
$ git clone https://github.com/dtolnay/ryu rust-ryu
$ cd rust-ryu
$ cargo run --example upstream_benchmark --release
这些基准测试测量打印 32 位浮点数的平均时间以及打印 64 位浮点数的平均时间,其中输入是 32 位和 64 位宽的均匀随机位模式。
上游 C 代码、不安全的直接 Rust 移植和安全的 Rust API 都表现相同,格式化 32 位浮点数大约需要 21 纳秒,格式化 64 位浮点数大约需要 31 纳秒。
还有 Rust 特定的基准测试,比较此实现与标准库,您可以使用以下命令运行
$ cargo bench
基准测试表明,在 f32 和 f64 输入的范围内,Ryū 比标准库快约 2-5 倍。测量结果为每次迭代的纳秒数;越小越好。
格式化
此库通常比标准库的 to_string 产生更易于阅读的输出,后者从不使用科学记数法。以下有两个示例
- ryu: 1.23e40, std: 12300000000000000000000000000000000000000
- ryu: 1.23e-40, std: 0.000000000000000000000000000000000000000123
两个库都打印不带科学记数法的短小数,例如0.0000123。
许可证
根据您的选择,该库受以下任一许可证的许可:Apache许可证2.0版本或Boost软件许可证1.0版本。除非您明确声明,否则您有意提交以包含在此crate中的任何贡献,如Apache-2.0许可证所定义,应按上述方式双重许可,不附加任何额外的条款或条件。