2 个版本

使用旧的 Rust 2015

0.1.1 2018年10月31日
0.1.0 2018年10月2日

#224值格式化

Download history • Rust 包仓库 267/week @ 2024-04-07 • Rust 包仓库 619/week @ 2024-04-14 • Rust 包仓库 382/week @ 2024-04-21 • Rust 包仓库 243/week @ 2024-04-28 • Rust 包仓库 312/week @ 2024-05-05 • Rust 包仓库 338/week @ 2024-05-12 • Rust 包仓库 387/week @ 2024-05-19 • Rust 包仓库 629/week @ 2024-05-26 • Rust 包仓库 836/week @ 2024-06-02 • Rust 包仓库 592/week @ 2024-06-09 • Rust 包仓库 448/week @ 2024-06-16 • Rust 包仓库 639/week @ 2024-06-23 • Rust 包仓库 519/week @ 2024-06-30 • Rust 包仓库 566/week @ 2024-07-07 • Rust 包仓库 554/week @ 2024-07-14 • Rust 包仓库 688/week @ 2024-07-21 • Rust 包仓库

2,344 每月下载量
11 个 Crates 中使用 (3 直接使用)

Apache-2.0 OR BSL-1.0

140KB
2K SLoC

ECMAScript Number.toString Ryū

ryu crate 的分支,将安全的 API 改为实施在 ECMAScript 2015 Number Type 的 ToString 应用中指定的格式化规则。它应用了注释 2 到算法,并使用偶数舍入来确定 s * (10 ^ (n - k)) 是否等于 m

原始 README (除徽章外) 以下。


Ryū,一种快速将浮点数转换为十进制字符串的算法的纯 Rust 实现。

PLDI'18 论文 Ryū: 快速浮点到字符串转换 由 Ulf Adams 撰写,包括该算法的完整正确性证明。该论文可在创意共享 CC-BY-SA 许可下获得。

此 Rust 实现是 Ulf Adams 用 C 实现的逐行移植,https://github.com/ulfjack/ryu。The ryu::raw 模块精确地暴露了 C 实现的 API 和格式,作为不安全的纯 Rust 函数。此外,还有以下示例代码中展示的安全 API。安全 API 使用相同的底层 Ryū 算法,但与 C 实现的格式化不同,以产生更易于阅读的输出,例如 0.3 而不是 3E-1

要求:此 crate 支持任何返回 rustc 1.15 的编译器版本;它不使用 Rust 标准库中的任何内容,因此可以从 no_std crates 中使用。

[dependencies]
ryu = "0.2"

示例

extern crate ryu;

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

以及我们自己的基准测试工具来运行

$ git clone https://github.com/ulfjack/ryu rust-ryu
$ cd rust-ryu
$ cargo run --example benchmark --release

这些基准测试衡量打印32位浮点数的平均时间和打印64位浮点数的平均时间,输入为均匀随机位模式,宽度分别为32位和64位。

上游的C代码、不安全的直接Rust端口和安全的优雅Rust API表现相同,格式化32位浮点数大约需要21纳秒,格式化64位浮点数大约需要31纳秒。

许可证

您可以选择以下任一许可证。

依赖项