On Tue, 3 Sept 2024 at 09:09, Dima Pasechnik <dimp...@gmail.com> wrote: > > Would it be better to hold a vote to decide on the ways to deal with this > issue, rather than on this particular PR? > Namely, the alternatives are > > 1) do nothing > 2) bring AA in line with Python > 3) bring RR in line with AA
What does it mean to bring RR in line with AA here? There are different ways to extend exponentiation a^b if b is not constrained to integer values but there is only really one natural way in the case of real and complex numbers if it should be both continuous and single-valued. For real a and b with positive a we can say that a^b = exp(b*log(a)). As long as you require a>0 this is consistent with the ways that you would naturally define the operation for integer or rational b or with a being in any subfield of the reals. The same definition a^b = exp(b*log(a)) extends to all complex numbers if you choose a branch convention for log and then you can allow a to be a negative number or generally any nonzero complex number. These two definitions of exponentiation for real and for complex numbers are consistent and are continuous in both a and b except at the branch cuts. The idea that for negative a and rational b you can say that a^b gives a real root if the denominator of b is odd does not extend in any way to a continuous function of b in either the reals or complex numbers. Since RR is approximate it is not possible to implement an operation like a^b coherently if the definition is not continuous in both a and b. To put this another way: you might want RR(-1)^(1/3) to be real but you certainly don't want RR(-1)^(1/2) to be real. If the exponent in a^b is an element of RR then you would need to distinguish whether it has an even or an odd denominator to be able to say whether the root is real or imaginary. Every non-integer element of RR literally has an even denominator though: >>> RR(1/3).sign_mantissa_exponent() (1, 6004799503160661, -54) >>> 6004799503160661 / 2**54 0.3333333333333333 Defining a^b for RR so that (-1)^(1/3) = -1 could only work if b was restricted to the rationals so that the exponent cannot be an element of RR. For AA the exponent is restricted to the rationals: >>> AA(4)^(1/2) 2 >>> AA(4)^AA(1/2) TypeError: unsupported operand parent(s) for ^: 'Algebraic Real Field' and 'Algebraic Real Field' -- Oscar -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/sage-devel/CAHVvXxSfnmMhcP9esrXHEZKeMi_3qwm6%3DtKkJn0JzCNN5wN%3DiA%40mail.gmail.com.