summaryrefslogtreecommitdiff
path: root/gnu/lib/libf2c/libF77/pow_hh.c
blob: 3379d8a7f7cea056602f3a6b81e9b13ccd7a27e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "f2c.h"

shortint
pow_hh (shortint * ap, shortint * bp)
{
  shortint pow, x, n;
  unsigned u;

  x = *ap;
  n = *bp;

  if (n <= 0)
    {
      if (n == 0 || x == 1)
	return 1;
      if (x != -1)
	return x == 0 ? 1 / x : 0;
      n = -n;
    }
  u = n;
  for (pow = 1;;)
    {
      if (u & 01)
	pow *= x;
      if (u >>= 1)
	x *= x;
      else
	break;
    }
  return (pow);
}