#除法 #端口 #整数 #u64 #部分 #zlib #libdivide

无std fastdivide

FastDivide是libdivide的部分移植。它使得减少除法开销成为可能。

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 数据库实现

Download history 41003/week @ 2024-04-08 43299/week @ 2024-04-15 39137/week @ 2024-04-22 48290/week @ 2024-04-29 54433/week @ 2024-05-06 58492/week @ 2024-05-13 59173/week @ 2024-05-20 63731/week @ 2024-05-27 128005/week @ 2024-06-03 114634/week @ 2024-06-10 124972/week @ 2024-06-17 158746/week @ 2024-06-24 130165/week @ 2024-07-01 119093/week @ 2024-07-08 122102/week @ 2024-07-15 124685/week @ 2024-07-22

每月 503,858次下载
110个crate中使用 110 (直接使用13个)

zlib致谢

13KB
211 代码行

Build Status

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)相同的除数除法操作;并且这种除法是程序中的瓶颈。

例如,这在计算直方图时非常有用。

无运行时依赖