快速分割
在x86上分割两个64位无符号整数的时间可能不应该比硬件div指令快,但是确实如此。 快约30%。
从技术上讲,硬件div指令将128位分子除以64位分母,但是没有理由它无法检查空的高位或具有64位版本。 更糟糕的是,很少使用128位功能,因为如果结果不适合64位,则会因硬件异常而爆炸! (而不是像大多数算术指令一样,返回截断的结果并设置一些标志)。
因为对于给定的分母/除数,许多工作是可预计算的,所以还提供了一个类,使您可以执行此预计算,然后将不同的分子重复除以同一分母。
由于该实现完全没有任何分支或内存访问,因此它也不会泄漏有关其自变量的任何边信道信息(至少不通过计时或内存!),因此对于加密应用程序在实际改进的同时可能很有用性能。
理论:
首先,在计算出floor(2^64/D)要格外小心。 第一个正确的结果位是通过前导零计数获得的,第二个正确的位是通过移位获得的,然
2021-02-09 22:04:52
4KB
C++
1