Алгоритм возведения в степень с плавающей степенью - PullRequest
1 голос
/ 13 декабря 2010

Я должен написать алгоритм, который возводит в степень основание (целое число или число с плавающей точкой) в аргументе целое число или число с плавающей точкой. Я написал этот алгоритм для 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 не имеет оператора или функции потенцирования). Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 октября 2011

Предположим, что вы можете использовать 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(abs(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;
  }
}
1 голос
/ 14 декабря 2010

Ну, более 17 часов без ответа, наконец-то я нашел ответ на свой вопрос:

Проще всего, мы можем решить проблему, используя значение "е", возводящее в степеньлогарифм числа, деленного на индекс:

e ^ (Log (число) / индекс)

, где число - радиканд, а индекс - искомый корень.

Например: 10-й корень числа 1024: e ^ (Log (1024) / 10) = 2.

PS: основанием функции Log также является «e».округленное значение для «е»: 2.718281828459045

Я надеюсь, что этот метод может быть полезным для вас.

...