4

计算数字的n次根的最快方法是什么?

我知道 Try and Fail 方法,但我需要一个更快的算法。

4

4 回答 4

10

执行此操作的规范方法是Newton's Method。如果您不知道, x n的导数是 nx n-1。这将派上用场。1 是一个很好的第一个猜测。你想把它应用到函数 a - x n

IIRC,它超级收敛于 a - x n形式的函数,但无论哪种方式,它都非常快。此外,IIRC,wiki 中关于它未能收敛的警告将适用于更复杂的函数,这些函数具有您感兴趣的“好”函数所缺乏的属性。

于 2010-10-03T04:55:16.813 回答
4

不是最快的,但它有效。替换您选择的类型:

    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;
    }
于 2013-08-21T17:03:50.933 回答
2

你指的是第n个根算法吗?这不是尝试失败的方法,而是重复的迭代算法,直到达到所需的精度。

于 2010-10-03T04:55:47.453 回答
0

使用吠陀数学提取第 n 根是最快的方法。有关算法的更多详细信息,请参阅http://www.vedicmaths.org/Journal.asp

于 2013-07-11T08:48:49.960 回答