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

Mik*_*ley 4 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))
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

tza*_*man 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)));
}
Run Code Online (Sandbox Code Playgroud)

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