1

我必须编写一个算法,对整数或浮点参数中的基数(整数或浮点数)求幂。我为 Deluge (zoho.com) 编写了这个算法,但它只能使用整数指数:

float math.potencia(float base, int expoente)
{  
   if(expoente>0)
    {
    base = base * thisapp.math.potencia(base, (input.expoente  -  1));
    }
    else if (expoente == 0)
    {
    base = 1;
    }
    return base;
}

(Deluge 没有增强运算符或函数)。谢谢!

4

2 回答 2

3

假设可以使用sqrt,可以使用如下算法:

double EPS = 0.0001;

double exponentiation(double base, double exp) {
  if(exp >= 1) {
    double temp = exponentiation(base, exp / 2);
    return temp * temp;
  } else {
    double low = 0;
    double high = 1.0;

    double sqr = sqrt(base);
    double acc = sqr;    
    double mid = high / 2;

    while(fabs(mid - exp) > EPS) {
      sqr = sqrt(sqr);

      if (mid <= exp) {
          low = mid;
          acc *= sqr;
      } else {
          high = mid;
          acc *= (1 / sqr);
      }

      mid = (low + high) / 2;
    }

    return acc;
  }
}
于 2011-10-10T08:08:00.897 回答
1

好吧,17个多小时没有回复,终于找到了我自己问题的答案:

以最简单的方式,我们可以使用“e”的值对数除以指数的对数求幂来解决问题:

e^(日志(数字)/索引)

其中 number 是基数, index 是所需的根。

例如:数字 1024 的 10 次方根:e^(Log(1024)/10) = 2。

PS:Log函数的base也是“e”。“e”的四舍五入值为:2.718281828459045

我希望这项技术对您有用。

于 2010-12-14T12:35:12.507 回答