#f64 #f32 #float #serialization #formatting #string-conversion #format

float_fast_print

基于Ulf Adams的Ryū算法的快速浮点数转字符串转换

1 个不稳定版本

使用旧的Rust 2015

0.1.2 2018年7月30日
0.1.1 2018年7月29日
0.1.0 2018年7月29日

#1243 in 编码

Apache-2.0 OR MIT

66KB
853

概述

这是一个由Google德国的Ulf Adams开发的Ryū浮点数转字符串转换算法的高性能本地Rust实现。

描述

此crate的目的是提高将f32和f64转换为字符串表示的速度,这在执行大量序列化时尤为重要,例如JSON、CSV、XLSX和科学数据格式,其中所有数字都内部以浮点数形式处理。在某些情况下,这可能是序列化的瓶颈。

在开发此代码时,注意到serde_json crate引用了dtoa crate,后者速度较慢且包含不安全代码。此crate不使用不安全代码,并且可能使用#![no_std]

状态

前景看好,Ryū bench_write_f32_shortest 函数的表现显著优于当前可用的替代方案

test tests::bench_dtoa               ... bench:          45 ns/iter (+/- 1)
test tests::bench_f32_debug          ... bench:         108 ns/iter (+/- 0)
test tests::bench_f32_format         ... bench:         109 ns/iter (+/- 0)
test tests::bench_write_f32_shortest ... bench:          25 ns/iter (+/- 0)

该crate的0.1.1版本中对函数的f32版本进行了彻底测试,保证使用此库转换时,所有可能的2^32浮点数值都可以进行无精度损失的往返转换

...
99.930916% complete
99.95419% complete
99.97748% complete
test test_exhaustive_roundtrip ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

对于f64版本的函数,有一个不太彻底的测试可用,但显然不能完全彻底,因为这需要数年的时间来运行。

待办事项

[ ] 实现两位查找表并进行基准测试。[ ] 清空缓存时比较性能与替代方案。[ ] 添加使用整数表示整数的JSON样式打印。

参考

无运行时依赖