简单运算符的第N个根

时间:2018-10-03 07:50:37

标签: c# libraries

我试图创建一个函数来查找数字的第n个根,而不使用Math等库。我只能使用+-* /运算符。

到目前为止,我一直在尝试重新创建Math.Pow(double num, double root)函数,但是没有运气,因为我无法提出一个需要两倍的倍数的解决方案。

我尝试使用此:

double pow(double a, int n) {
double result = 1;
for(int i = 0; i < n; i++) {
    result *= a
}
return result;

但这对我来说实际上不起作用,因为它需要一个int而不是一个double来作为根。

我需要源代码或重新创建Math.Pow(double a, double b)

1 个答案:

答案 0 :(得分:-1)

让我们从Rosetta代码(https://rosettacode.org/wiki/Nth_root)改编代码:

private static double DPow(double a, int n)
{
    var result = 1.0;
    for (; n > 0; n--) result *= a;
    return result;
}

private static double DAbs(double a)
{
    return (a > 0.0) ? a : -a;
}

public static double NthRoot(double a, int n, double p)
{
    var _n = (double)n;
    var x0 = a;
    var x1 = a / _n;
    while (DAbs(x0 - x1) > p)
    {
        x1 = x0;
        x0 = (1.0 / _n) * (((_n - 1.0) * x1) + (a / DPow(x1, _n - 1.0)));
    }
    return x0;
}

public static double NthRoot(double a, int n)
{
    return NthRoot(a, n, .0001);
}

我们实现了一个简单的pow函数和一个非常简单的abs函数,并使用这两者来实现Rosetta Code网站给出的算法。希望这能满足您的要求!