1个稳定版本
1.0.16 | 2024年1月19日 |
---|
在值格式化中排名164
每月下载量805
在3个Crates中使用(通过encoder)
110KB
2K SLoC
Ryū
Pure 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
基准测试显示Ryū在各种f32和f64输入下比标准库快2-5倍。测量值是每迭代纳秒数;越小越好。
格式化
此库生成的输出通常比标准库的to_string更易于阅读,后者从不使用科学记数法。以下有两个示例
- ryu: 1.23e40, std: 12300000000000000000000000000000000000000
- ryu: 1.23e-40, std: 0.000000000000000000000000000000000000000123
两个库都打印短十进制数,如0.0000123,而不使用科学记数法。
许可证
根据您的选择,许可协议为Apache许可证2.0版本或Boost软件许可证1.0版本。除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以包含在此crate中的任何贡献,将按上述方式双许可,不附加任何额外条款或条件。