1

整数またはfloat引数で基数(整数またはfloat)を指数化するアルゴリズムを作成する必要があります。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 関数のベースも「e」です。「e」の丸め値は次のとおりです: 2.718281828459045

このテクニックがあなたに役立つことを願っています。

于 2010-12-14T12:35:12.507 に答える