Well, DoubleFloat is hardware float and modern hardware follows IEEE
rules. And there is vocal group insiting that library functions
should follow IEEE rules, even if done in software. Practicaly,
FriCAS uses Lisp complex 'log' and it gives us IEEE behaviour.
I am not sure how big problem this is for you: if imaginary
part comes from computations, then you have bigger problem.
If imaginary part is constant, then 'complex(x, 0)' gives
you positve sign for imaginary part, so there is easy
workaround. If you are really determined you can create
a wrapper domain inheriting most from Complex(DoubleFloat),
but overriding a few funcions that you do not like. However,
I do not think that turning Complex(DoubleFloat) into such
wrapper domain is good idea: I can not satisfy everyone.
And adding a wrapper is more flexible than fighting with
unwanted wrapper.
Concerning case when exponent is from Fraction(Integer):
this is generic code. We may add a special case for
DoubleFloat so that it behaves like DoubleFloat exponent.
OTOH different domains show different behaviour: purely
symbolic domains are subtly different in their handling
of branches compared to numeric domains. So users who
care about branches must be careful.
--
Waldek Hebisch