blob: 399986ea1d9842f58c9a79b962a3900756d3db8b (
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
|
#define _GNU_SOURCE
#include <math.h>
/*
* This is not standard, but often you only need such this function
* which is much shorter than the generic pow() function.
*
* double ipow ( double mant, int expo );
*/
double ipow ( double mant, int expo )
{
double ret = 1.;
unsigned int e = expo; /* Some attention is necessary for expo = 2^31 */
if ( (int)e < 0 ) {
e = -e;
mant = 1./mant;
}
while (1) {
if ( e & 1 )
ret *= mant;
if ( (e >>= 1) == 0 )
break;
mant *= mant;
}
return ret;
}
|