【发布时间】:2014-02-21 16:50:26
【问题描述】:
找到某个数字(即 2 的幂)使用的 2 的幂的最快方法是什么?
我对数学不是很熟练,所以我不确定如何最好地描述它。但该函数看起来类似于x = 2^y,其中y 是输出,x 是输入。如果这有助于解释它,这是一个真值表。
0 = f(1)
1 = f(2)
2 = f(4)
3 = f(8)
...
8 = f(256)
9 = f(512)
我已经创建了一个函数来执行此操作,但我担心它不是很有效(或就此而言很优雅)。会有更简单、更有效的方法吗?我正在使用它来计算纹理的哪个区域用于缓冲绘制的完成方式,因此对于每个绘制的对象至少调用一次。这是我到目前为止所做的功能:
uint32 getThePowerOfTwo(uint32 value){
for(uint32 n = 0; n < 32; ++n){
if(value <= (1 << n)){
return n;
}
}
return 32; // should never be called
}
【问题讨论】:
-
试试logarithm。
-
我同意对数的使用。但是请尝试编写您希望函数使用的数字的二进制表示。 提示提示
-
“这是我到目前为止所做的功能:” - 我认为这个功能很好。 不用担心效率。此外,移动 1 位直到你发现结果大于你的数字是完全“优雅”的,因为它易于阅读/理解和实施。
-
顺便说一句,你应该学点初等数学。 (如果您不认识对数,您就不会在编程方面走得太远。)
-
@HonkyTonk - 我在表示中进行了编辑,谢谢。 (至于对数的使用,我想它本质上是 2 的对数,但我认为使用 std::log 会更昂贵)