diff --git a/src/sage/rings/integer.pyx b/src/sage/rings/integer.pyx index 7d0e6f34464..44523fed015 100644 --- a/src/sage/rings/integer.pyx +++ b/src/sage/rings/integer.pyx @@ -2851,16 +2851,26 @@ cdef class Integer(sage.structure.element.EuclideanDomainElement): sage: ZZ(8).log(int(2)) 3 + Check that negative bases yield complex logarithms (:issue:`39959`):: + + sage: 8.log(-2) + 3*log(2)/(I*pi + log(2)) + sage: (-10).log(prec=53) + 2.30258509299405 + 3.14159265358979*I + + Check that zero base yield complex logarithms (:issue:`39959`):: + + sage: 8.log(0) + 0 + TESTS:: sage: (-2).log(3) # needs sage.symbolic (I*pi + log(2))/log(3) """ cdef int self_sgn - if m is not None and m <= 0: - raise ValueError("log base must be positive") self_sgn = mpz_sgn(self.value) - if self_sgn < 0 and prec is None: + if (self_sgn < 0 or m is not None and m<=0) and prec is None: from sage.symbolic.ring import SR return SR(self).log(m) if prec: