如何计算最接近2或10的幂是多少?

Nic*_*ell 10 algorithm math

将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是任何方便基地的对数.

  • 韦奇:是的,当然.我使用数学符号(在ASCII的范围内)而不是特定的编程语言. (4认同)

Vin*_*ert 5

对于整数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)

  • 请注意,此算法适用于32位.它还将2的幂提升到下一个值(例如,4将给出8).要更改位数,请添加或删除术语,以便第一个术语是您拥有的位数的一半.要保持两位数的幂,只需在开头减去一个. (2认同)