我正在寻找不会出现浮点精度问题的(int) log2(X)
的等价物。
我已经找到了几个关于这个问题的讨论(在stackoverflow和outside),但没有一个能够满足以下所有三个条件:
我发现或想到的一些解决方案包括(对于时间复杂性我使用N
来表示位数,而不是X
的值):
__builtin_clz
。此解决方案依赖于编译器。bsr
指令。此解决方案取决于架构。O(N)
。O(log(N))
。此外,与更简单的解决方案相比,它可能会带来一些开销。log2
进行初步猜测,并从中迭代2的幂。我不确定这是否解决了准确性问题,但也许这会起作用。尽管如此,使用log2
中的浮点数可能无法击败更简单的整数解决方案。也许我忽略了所提出的解决方案的某些方面,但所有这些都将打破三个条件中的一个。
是否有满足所有三个条件的解决方案? (请注意,我不一定要求简单/简单的解决方案,尽管这是首选)