我有一个存储桶,它的大小是以2为指数增长的。因此,存储桶是:(0-1], (1-2], (2-4], (4-8], (8-16]...
。
给定一个数字,我如何有效地判断它属于哪个存储桶索引?我能想到的一种选择是使用log2(N)
并向上舍入到下一个整数。但是,是否可以推导出一个比在C++
中使用log更快的简单数学公式呢?这将在延迟非常敏感的路径中调用,因此即使是微秒也很重要。
发布于 2021-04-07 09:01:22
只需使用std::count_lzero
-它计算参数中第一个1位之前的前导(更重要的)0,这将有效地产生一个整数的log2函数。您可以期望使用平台支持的最有效的机器代码来实现它,在x86s的情况下,这是一条专用的指令-比您使用bit- hackery编写的任何代码都要快。
https://stackoverflow.com/questions/66977839
复制相似问题