Algorithm 浮动指数求幂算法

Algorithm 浮动指数求幂算法,algorithm,math,zoho,exponentiation,Algorithm,Math,Zoho,Exponentiation,我必须编写一个算法,在整数或浮点参数中对基(整数或浮点)求幂。我为洪水(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)

我必须编写一个算法,在整数或浮点参数中对基(整数或浮点)求幂。我为洪水(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;
}

(洪水没有增强运算符或功能)。谢谢

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

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

e^(日志(编号)/索引)

其中,number是半径,index是所需的根

例如:数字1024的第10个根: e^(对数(1024)/10)=2

PS:日志函数的基础也是“e”。 “e”的舍入值为:2.718281828459045


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

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

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

e^(日志(编号)/索引)

其中,number是半径,index是所需的根

例如:数字1024的第10个根: e^(对数(1024)/10)=2

PS:日志函数的基础也是“e”。 “e”的舍入值为:2.718281828459045


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

假设您可以使用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;
  }
}
double-EPS=0.0001;
双指数运算(双基,双经验){
如果(exp>=1){
双温=指数运算(基数,exp/2);
返回温度*温度;
}否则{
双低=0;
双高=1.0;
双sqr=sqrt(基准);
双acc=sqr;
双中=高/2;
而(工厂(中期出口)>每股收益){
sqr=sqrt(sqr);

如果(mid假设可以使用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;
  }
}
double-EPS=0.0001;
双指数运算(双基,双经验){
如果(exp>=1){
双温=指数运算(基数,exp/2);
返回温度*温度;
}否则{
双低=0;
双高=1.0;
双sqr=sqrt(基准);
双acc=sqr;
双中=高/2;
而(工厂(中期出口)>每股收益){
sqr=sqrt(sqr);

if(mid)你没有得到答复,因为你的问题标记不好。我希望你给我建议其他标记。对于我的分数,我不能创建新标记。你没有得到答复,因为你的问题标记不好。我希望你给我建议其他标记。对于我的分数,我不能创建新标记。