#除法 #算术 #运行时 #常量 #执行 #u64 #除数

fastdiv

通过运行时常量执行快速除法

1个不稳定版本

0.1.0 2022年3月29日

#1760 in 数学

Download history 28/week @ 2024-04-01 37/week @ 2024-04-22 86/week @ 2024-04-29 196/week @ 2024-05-06 178/week @ 2024-05-13 62/week @ 2024-05-20 45/week @ 2024-05-27 137/week @ 2024-06-03 122/week @ 2024-06-10 141/week @ 2024-06-17 176/week @ 2024-06-24 176/week @ 2024-07-01 240/week @ 2024-07-08

745 每月下载量

MIT许可证

8KB
133

fastdiv

此crate通过预先计算可重复使用的除数因子,执行通过运行时常量的快速除法。我们为u32和u64提供快速除法。

示例

use fastdiv::FastDiv;

let d: u32 = 3;
let m = d.precompute_div();

let n1 = 4;
let n2 = 9;

assert_eq!(n1 / d, n1.fast_div(m));
assert_eq!(n2 / d, n2.fast_div(m));

assert_eq!(n1 % d, n1.fast_mod(m, d));
assert_eq!(n2 % d, n2.fast_mod(m, d));

assert_eq!(n1 % d == 0, n1.is_multiple_of(m));
assert_eq!(n2 % d == 0, n2.is_multiple_of(m));

基准测试

基准测试可以通过 cargo bench 执行。在我的 i5-11400 @ 2.60GHz 上的结果是

fast div u32            time:   [484.54 ps 484.74 ps 484.93 ps]
slow div u32            time:   [1.3677 ns 1.3685 ns 1.3697 ns]
const mod u32           time:   [485.90 ps 487.29 ps 489.74 ps]

fast mod u32            time:   [640.64 ps 641.03 ps 641.47 ps]
slow mod u32            time:   [1.3670 ns 1.3675 ns 1.3681 ns]
const mod u32           time:   [536.29 ps 536.99 ps 537.92 ps]


fast div u64            time:   [683.69 ps 683.97 ps 684.31 ps]
slow div u64            time:   [2.2783 ns 2.2792 ns 2.2803 ns]
const div u64           time:   [566.71 ps 569.92 ps 573.22 ps]

fast mod u64            time:   [1.0259 ns 1.0264 ns 1.0270 ns]
slow mod u64            time:   [2.2786 ns 2.2792 ns 2.2799 ns]
const mod u64           time:   [598.19 ps 598.36 ps 598.55 ps]

无运行时依赖