舍入到给定基数的最接近整数次幂

时间:2010-04-24 18:45:36

标签: algorithm math rounding

我正在尝试将一个数字舍入到另一个数字的下一个最小幂。我并不特别关注它的方向,但如果可能的话,我更倾向于向下。

我正在舍入的数字x将满足x > 0,并且通常符合范围0 < x <= 1。它很少会超过1。

更一般地说,我的问题是:给定一个数字x,如何将其舍入到某个基数b的最接近整数幂?

我希望能够向任意基础舍入,但我现在最关心的是基数2和2的分数幂,如2 ^(1/2),2 ^(1/4) ),等等。这是我目前的基数2算法。

double roundBaseTwo(double x)
{
    return 1.0 / (1 << (int)((log(x) * invlog2))
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:6)

你有正确的想法;对于任何基数x,x ^ floor( log_x(n) )就是你想要的。 (其中log_x表示'登录基地 x ')
在C#中:

static double roundBaseX(double num, double x)
{
    return Math.Pow(x, Math.Floor(Math.Log(num, x)));
}

如果你不能将对数取为任意基数,只需使用公式:log_x(n) = log(n) / log(x)