C中的便携式恒定时间整数log2

时间:2018-06-12 09:38:39

标签: c floating-accuracy

我正在寻找不会出现浮点精度问题的(int) log2(X)的等价物。

我已经找到了几个关于这个问题的讨论(在stackoverflow和outside),但没有一个能够满足以下所有三个条件:

  • 可移植性:应该能够在多个操作系统和体系结构中运行。
  • 效率:恒定时间最佳。
  • 准确性:不应出现准确性错误。

我发现或想到的一些解决方案包括(对于时间复杂性我使用N来表示位数,而不是X的值):

  • 使用GCC' __builtin_clz。此解决方案依赖于编译器。
  • 使用bsr指令。此解决方案取决于架构。
  • 迭代2的权力。此解决方案为O(N)
  • 二元搜索2的幂。此解为O(log(N))。此外,与更简单的解决方案相比,它可能会带来一些开销。
  • 使用C' log2进行初步猜测,并从中迭代2的幂。我不确定这是否解决了准确性问题,但也许这会起作用。尽管如此,使用log2中的浮点数可能无法击败更简单的整数解决方案。

也许我忽略了所提出的解决方案的某些方面,但所有这些都将打破三个条件中的一个。

是否有满足所有三个条件的解决方案? (请注意,我不一定要求简单/简单的解决方案,尽管这是首选)

0 个答案:

没有答案