计算数字的n次根的最快方法是什么?
我知道 Try and Fail 方法,但我需要一个更快的算法。
执行此操作的规范方法是Newton's Method。如果您不知道, x n的导数是 nx n-1。这将派上用场。1 是一个很好的第一个猜测。你想把它应用到函数 a - x n
IIRC,它超级收敛于 a - x n形式的函数,但无论哪种方式,它都非常快。此外,IIRC,wiki 中关于它未能收敛的警告将适用于更复杂的函数,这些函数具有您感兴趣的“好”函数所缺乏的属性。
不是最快的,但它有效。替换您选择的类型:
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;
}
你指的是第n个根算法吗?这不是尝试失败的方法,而是重复的迭代算法,直到达到所需的精度。
使用吠陀数学提取第 n 根是最快的方法。有关算法的更多详细信息,请参阅http://www.vedicmaths.org/Journal.asp