我正在尝试将一个数字舍入到另一个数字的下一个最小幂。我并不特别关注它的方向,但如果可能的话,我更倾向于向下。
我正在舍入的数字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))
}
任何帮助将不胜感激!
答案 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)