5个版本 (3个重大更新)
0.4.1 | 2024年4月1日 |
---|---|
0.4.0 | 2022年1月27日 |
0.3.0 | 2021年2月22日 |
0.2.0 | 2018年5月11日 |
0.1.0 | 2017年6月13日 |
#12 in 数据库实现
每月 503,858次下载
在110个crate中使用 110 (直接使用13个)
13KB
211 代码行
FastDivide...
FastDivide是libdivide的一个简单/部分Rust移植,由ridiculous_fish实现。Libdivide在zlib许可下分发,FastDivide也是如此。
此移植仅部分实现:它只包含一个用于u64
整数的除法实现。
那么它到底是什么呢?
除法对CPU来说是一个非常昂贵的操作。你可能已经注意到,当除数在编译时已知时,编译器会将操作转换为一种神秘的乘法和位移的组合。
关键思想是,与其计算
N / D
不如计算(k足够大时更快)
N * ( 2^k / D ) / (2^k)
如果D事先已知,(2^k / D)可以由编译器预先计算。
不幸的是,如果除数在编译时未知,编译器无法使用这个技巧。
fastdivide的目的就是通过让你预先计算一个DivideU64
对象来应用同样的技巧。
什么时候有用?
如果你有很多(> 10)相同的除数除法操作;并且这种除法是程序中的瓶颈。
例如,这在计算直方图时非常有用。