代码之家  ›  专栏  ›  技术社区  ›  Mike Bailey

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

  •  4
  • Mike Bailey  · 技术社区  · 14 年前

    我正试着把一个数四舍五入到另一个数的下一个最小幂。我不知道它朝哪个方向旋转,但如果可能的话,我更喜欢向下。

    数字 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 回复  |  直到 12 年前
        1
  •  6
  •   tzaman    14 年前

    你的想法是对的,对于任何基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)