Так, теперь про вычисление произвольной степени:
Напомню, что
a^b=exp(ln(a)*b);
Для наших целей проще использовать log2, это будет
a^b=2^(log2(a)*b);
Как сделать быстрый log2 мы уже обсуждали выше:
str_setchar(temp_str,0,a,'f');
str_getchar(temp_str,2,ival,'su')...