C# 查找第 N 个根

21
我使用以下方法计算double值的N次根,但是计算240次根需要很长时间。我了解到了牛顿法,但无法将其实现为一个方法。任何帮助将不胜感激。
static double NthRoot(double A, int N)
{
   double epsilon = 0.00001d;//
   double n = N;
   double x = A / n;
   while (Math.Abs(A-Power(x,N)) > epsilon)
   {
    x = (1.0d/n) * ((n-1)*x + (A/(Power(x, N-1))));
   }
   return x;
}

你看过这个吗?http://en.wikipedia.org/wiki/Newton%27s_method#Pseudocode 这应该不难翻译成真正的代码。 - DrCopyPaste
1
这里实际上是什么问题?你只是想让它更快吗?还是你明确地想看看牛顿法在实际代码中的样子? - DrCopyPaste
我遇到了POW,但出于某种原因,我认为它与我上面发布的方法相同。我不是程序员,除非我自己无法解决问题,否则我不会在这里发布问题。谢谢。 - illusion
你从哪里得到了这个power-method呢?是自己写的还是在什么命名空间里? - DrCopyPaste
从这里https://dev59.com/_1DTa4cB1Zd3GeqPM-Jl,很有趣,我遇到了Pow,但在学习上述方法后,我认为它不可能如此简单。我正在学习(通过(学习我需要的)C#),我尝试为交易程序NinjaTrader编写指标。 - illusion
2个回答

63
static double NthRoot(double A, int N)
{
    return Math.Pow(A, 1.0 / N);
}

来自维基百科:

在微积分中,根号被视为指数运算的特殊情况,其中指数是一个分数:

\sqrt[n]{x} \,=\, x^{1/n} 

但是我想要使用1.0/3==0.333333333而不是1/3的第三个根。 - lindexi
8
计算机算术始终受基础数据类型精度的限制。在足够的精度范围内,它们是相等的。 - Stefan Dragnev

2
你可以使用与查找数字幂相同的函数,只需使用数字的倒数即可。
要找到X的N次方根,可以编写以下内容:
int root = Convert.ToInt32(Math.Pow(X, (1 / N)); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接