【问题标题】:Floating exponent exponentiation algorithm浮动指数求幂算法
【发布时间】:2011-05-24 20:13:10
【问题描述】:

我必须编写一个算法,对整数或浮点参数中的基数(整数或浮点数)求幂。我为 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 没有增强运算符或函数)。谢谢!

【问题讨论】:

    标签: algorithm math zoho exponentiation


    【解决方案1】:

    假设可以使用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;
      }
    }
    

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      我希望这个技巧对你有用。

      【讨论】:

      • 您没有得到回复,因为您的问题标记不当。
      • 我想如果你向我推荐另一个标签。为了我的分数,我不能创造新的。
      猜你喜欢
      • 2011-05-24
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多