C# 具有简单运算符的n次根

C# 具有简单运算符的n次根,c#,libraries,C#,Libraries,我正在尝试创建一个函数来查找数字的第n个根,而不使用数学等库。我只能使用+-*/运算符 到目前为止,我一直在尝试重新创建Math.Powdouble num,double root函数,但运气不佳,因为我无法想出一个需要两个double的解决方案 我试过使用这个: double pow(double a, int n) { double result = 1; for(int i = 0; i < n; i++) { result *= a } return result; 但这

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

到目前为止,我一直在尝试重新创建Math.Powdouble num,double root函数,但运气不佳,因为我无法想出一个需要两个double的解决方案

我试过使用这个:

double pow(double a, int n) {
double result = 1;
for(int i = 0; i < n; i++) {
    result *= a
}
return result;
但这对我来说并不适用,因为它的根是int而不是double


我需要源代码或数学的再创造。让我们改编Rosetta代码中的代码:


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

你说我不能想出一个需要两倍的解决方案是什么意思?您是否有任何错误/例外?发布代码并解释到底是什么问题。@Guy我认为OP在x是双精度的,y是整数的情况下能够计算出x^y,但在y也是双精度的情况下却不能,包括0.5sqrt@vc74马上money@vc74如果你能给我一些代码示例,我将非常欢迎你这么做。请提供一个最小、完整且可验证的示例。向我们展示您最近一次尝试的代码以及您被卡住的地方。并解释为什么结果不是你所期望的。编辑您的问题以包含代码,请不要将其添加到注释中,因为它可能无法阅读。最好是展示实际发生的事情,而不是描述你期望发生的事情。我花了1分钟找到这个…@PinkBoi请学习如何研究。这是一个很好的评论,但回答很差。在Stackoverflow中,仅链接的答案被认为质量很低。您现在应该知道了。@dumetrulo您发布的链接正在使用数学库。。在我编辑之后,请学会阅读给选民们听:请你们解释一下,这样我可以尝试改进我的答案;否则,我将不得不得出结论,认为我的帮助不值得赞赏,并删除我的答案…@bommelding我回答问题是为了好玩。在没有任何解释的情况下接受反对票是不好玩的。尽管我同意他们不太可能像调查自己那样从中学习,但我并不担心免费解决他的家庭作业是否对OP有用,我最初否决的无代码答案实际上更有助于这种体验。
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);
}