xref: /DragonOS/kernel/src/common/math/pow.c (revision 2813126e3190c9b3c1a836a647b259a7adbe0cf3)
1*2813126eSlogin #include <common/math.h>
2*2813126eSlogin #include <common/stddef.h>
3*2813126eSlogin 
pow(int64_t x,int y)4*2813126eSlogin int64_t pow(int64_t x, int y)
5*2813126eSlogin {
6*2813126eSlogin     if (y == 0)
7*2813126eSlogin         return 1;
8*2813126eSlogin     if (y == 1)
9*2813126eSlogin         return x;
10*2813126eSlogin     if (y == 2)
11*2813126eSlogin         return x * x;
12*2813126eSlogin     int64_t res = 1;
13*2813126eSlogin     while (y != 0)
14*2813126eSlogin     {
15*2813126eSlogin         if (y & 1)
16*2813126eSlogin             res *= x;
17*2813126eSlogin         y >>= 1;
18*2813126eSlogin         x *= x;
19*2813126eSlogin     }
20*2813126eSlogin     return res;
21*2813126eSlogin }