代码之家  ›  专栏  ›  技术社区  ›  Alon Gubkin

n次根算法

  •  4
  • Alon Gubkin  · 技术社区  · 14 年前

    -一个数的根?

    我知道尝试失败的方法,但我需要一个更快的算法。

    4 回复  |  直到 11 年前
        1
  •  10
  •   aaronasterling    14 年前

    标准的方法是 Newton's Method . 这会派上用场的。1是一个很好的第一个猜测。你想把它应用到函数a-x

    IIRC,它是a-x形式函数的超收敛 但不管怎样,速度都很快。此外,IIRC,wiki中关于它无法收敛的警告将应用于更复杂的函数,这些函数具有您感兴趣的“nice”函数所缺少的属性。

        2
  •  4
  •   Doug    11 年前

    不是最快的,但很管用。替换您选择的类型:

        private static decimal NthRoot(decimal baseValue, int N)
        {
            if (N == 1)
                return baseValue;
            decimal deltaX;
            decimal x = 0.1M;
            do
            {
                deltaX = (baseValue / Pow(x, N - 1) - x) / N;
                x = x + deltaX;
            } while (Math.Abs(deltaX) > 0);
            return x;
        }
    
        private static decimal Pow(decimal baseValue, int N)
        {
            for (int i = 0; i < N - 1; i++)
                baseValue *= baseValue;
            return baseValue;
        }
    
        3
  •  2
  •   Mitch Wheat    14 年前

    你指的是 nth root algorithm ? 这不是一种尝试失败的方法,而是一种反复迭代的算法,直到达到所需的精度。

        4
  •  0
  •   Vitthal Jadhav    11 年前

    用吠陀数学提取n根是最快的方法。更多关于 算法参考 http://www.vedicmaths.org/Journal.asp