具有简单运算符的 N 次根

Nth root with simple operators

我正在尝试创建一个函数来查找数字的 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)

的源代码或重制版

让我们改编 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 站点给出的算法。希望这能满足您的要求!