将2或10的最近功率与另一个数字相结合的最有效方法是什么?例如
对于2的幂,3.5将返回4,对于10的幂,则返回1
对于2的幂,123将返回128,对于10的幂,则返回100
对于2的幂,0.24将返回0.25,对于10的幂,则返回0.1
我只是在寻找算法而不介意语言.
Gre*_*ill 32
n^round(log_n(x))
Run Code Online (Sandbox Code Playgroud)
其中log_n是基数n的对数.您可能必须修改round(),具体取决于您如何定义"最近".
请注意,log_n(x)
可以实现为:
log_n(x) = log(x) / log(n)
Run Code Online (Sandbox Code Playgroud)
哪里log
是任何方便基地的对数.
对于整数2的幂,有一个聪明的技巧,包括将最后一位一遍又一遍地复制到右边.然后,你只需增加你的号码,你就有2的力量.
int NextPowerOf2(int n)
{
n |= (n >> 16);
n |= (n >> 8);
n |= (n >> 4);
n |= (n >> 2);
n |= (n >> 1);
++n;
return n;
}
Run Code Online (Sandbox Code Playgroud)