第n个根算法

时间:2010-10-03 04:44:29

标签: c# algorithm math nth-root

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

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

4 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分: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;
    }

答案 2 :(得分:2)

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

答案 3 :(得分:0)

使用vedic数学提取第n个根是最快的方法。有关的更多细节 算法参考http://www.vedicmaths.org/Journal.asp