simplification of number ^ number



The option variables domain, numer, numer_pbranch, and m1pbranch control the simplification of number^number.
These options are documented, but it's a mess; examples:

 (%i40) block([domain : real, m1pbranch : false, numer_pbranch : false, numer : true], (-5.0)^(1/2));
 (%o40) 2.23606797749979*(-1)^0.5

 (%i41) block([domain : real, m1pbranch : false, numer_pbranch : false, numer : false], (-5.0)^(1/2));
 (%o41) 2.23606797749979*%i

The option variable m1pbranch controls the simplification of (-1)^x, but it's unclear to a user when (-1)^x
will be introduced into a calculation.

You all might enjoy trying pow(-5,1/2), pow(-5.0, 1/2), pow(-5.0, 1/3), pow(-5.0, 0.333333333333), ...

pow(x,y) := block([l : []],
  for d in ['real, 'complex] do (
   for n in [false, true] do (
     for pb in [false,true] do (
        for m1 in [false,true] do (
          block([domain : d, m1pbranch : m1, numer_pbranch : pb, numer : n], 
                l : cons([x^y, domain, m1pbranch, numer_pbranch, numer],l)))))),
   l : cons(['(x^y),'domain, 'm1pbranch, 'numer_pbranch, 'numer],l),
   funmake('matrix, l))$

I was thinking about the possibility of using the bigfloat package to do more evaluation of number^number.
But the 16 values for domain, numer, numer_pbranch, and m1pbranch make it complicated.

--Barton