我试图创建一个函数来查找数字的第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)
答案 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网站给出的算法。希望这能满足您的要求!