计算数字的 n - 根的最快方法是什么?
我知道Try and Fail方法,但我需要更快的算法。
答案 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