将2或10的最近功率与另一个数字相结合的最有效方法是什么?例如
对于2的幂,3.5将返回4,对于10的幂,则返回1
对于2的幂,123将返回128,对于10的幂,则返回100
对于2的幂,0.24将返回0.25,对于10的幂,则返回0.1
我只是在寻找算法而不介意语言.
n^round(log_n(x))
其中log_n是基数n的对数.您可能必须修改round(),具体取决于您如何定义"最近".
请注意,log_n(x)
可以实现为:
log_n(x) = log(x) / log(n)
哪里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; }