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)
任何帮助,将不胜感激!
你有正确的想法; 对于任何基数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)