
Hi, Is there a reason why I can't use ** to square zero as a complex number? Prelude> :m Data.Complex Prelude Data.Complex> (0:+0) ** 2 NaN :+ NaN Prelude Data.Complex> (0 :: Complex Double) ** 2 NaN :+ NaN Using GHC 7.4.1. Thanks, Scott

On 07/26/12 17:08, Scott N. Walck wrote:
Hi,
Is there a reason why I can't use ** to square zero as a complex number?
Prelude> :m Data.Complex Prelude Data.Complex> (0:+0) ** 2 NaN :+ NaN Prelude Data.Complex> (0 :: Complex Double) ** 2 NaN :+ NaN
I think that's because (**) allows foating exponents which can't be deterministically applied to a complex base (if I have my maths correct, that is). You can use the (^) which can be applied to any numeric base, but only allows integral exponents. Prelude Data.Complex> (0 :: Complex Double) ^ 2 0.0 :+ 0.0

On Thu, Jul 26, 2012 at 12:08:00PM -0400, Scott N. Walck wrote:
Hi,
Is there a reason why I can't use ** to square zero as a complex number?
Prelude> :m Data.Complex Prelude Data.Complex> (0:+0) ** 2 NaN :+ NaN Prelude Data.Complex> (0 :: Complex Double) ** 2 NaN :+ NaN
It appears that Complex uses the default implementation of (**), namely, x ** y = exp (log x * y) I have no opinions on whether this is a good idea. But as someone else noted, (^) works fine if you know you want to use a positive integral power. -Brent
participants (3)
-
Brent Yorgey
-
Carlos J. G. Duarte
-
Scott N. Walck