#include <stdio.h>
typedef union {
double doubleValue;
int intValue;
} return_value;
#define N 128
static return_value readConsole(char *msg,int isDouble) {
static char input[N];
return_value result;
printf("%s", msg);
fgets(input, N, stdin);
sscanf(input, (isDouble) ? "%lf" : "%d",
(isDouble) ? &result.doubleValue : &result.intValue);
return result;
}
static double power(double a, int b) {
if(b == 0)
return 1.0;
if(b > 0)
return power(a, b - 1) * a;
return power(a, b + 1) / a;
}
int main(void) {
return_value ret;
double a;
int b;
do{
a = readConsole("a=", 1).doubleValue;
b = readConsole("b=", 0).intValue;
printf("a^b=%16.15f\n", power(a, b));
} while (a < 0.0);
return 0;
}
/* end */