Home c The implementation of the exponentiation function. C / C++

The implementation of the exponentiation function. C / C++

Author

Date

Category

Prompt the best algorithm for the realization of the construction of a power function (pow).


Answer 1, Authority 100%

Maybe this is not the best way, but it works!

long int pow (long int x, unsigned int n)
 {
  if (n == 0)
    return 1;
  else if (n == 1)
    return x;
  else if (n% 2 == 0)
    return pow (x * x, n / 2);
  ELSE.
    return pow (x * x, n / 2) * x;
 }

Answer 2, authority 80%

Specify the question, or the previous answer is correct. If it is necessary to calculate the degree of real numbers, the equation b ^ x = exp (x * ln (b)). If you want to implement and functions exponential and natural logarithm, please – unpack their by Taylor

.


Answer 3, authority 80%

Note to all answers. What to do with the overflow? Nowhere it is not analyzed.

For example a library function

double pow (double x, double y)

sets errno to ERANGE


Answer 4, authority 80%

Shortest code (:

class big {/ * implementation of long arithmetic * /};
big BinPow (big a, long long n) {
  big res = big (1); // here res = 1
  while (n) n & amp; 1 ? (Res * = a, --n): (a * = a, n & gt; & gt; 1);
  reutn res;
}

In general, the properties are used here:
1. a ^ n = a ^ (n / 2) * a ^ (n / 2) – for odd n;
2. a ^ n = a ^ (n / 1) * a -. For even n

Dlinka for pathos (:


Answer 5, authority 60%

I would implement the same algorithm as in the first answer, but iteratively, without spending too much time on the recursive call and O (log n) memory in the call stack, and with a few optimizations. The following code works only for non-negative integer n, for other values ​​of n using a Taylor series expansion.

long int pow (long int x, unsigned int n)
{
  long int a = x, p = 1;
  while (n & gt; 0)
  {
    if ((n & amp;! 1) = 0)
      p * = a;
    a * = a;
    n & gt; & gt; = 1;
  }
  return p;
}

Answer 6, authority 20%

There is a lot simpler:

int pwr (register int m, register int e)
{
  register int temp;
  temp = 1;
  for (; e; e--)
    temps = temp * m;
  return temp;
}

Answer 7

int pow (int a, int n)
{
  if (n == 0) return 1;
  ELSE.
    if (n == 1) return a;
  ELSE.
    return pow (a + a, n-1);
}

Programmers, Start Your Engines!

Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.

Recent questions