[Haskell-cafe] Incorrect behavior in Data.Complex ?

jared simpson jjaredsimpson at gmail.com
Mon Nov 18 04:20:21 UTC 2013


Prelude Data.Complex> 0**2
0.0
Prelude Data.Complex> 0**2 :: Complex Double
NaN :+ NaN
Prelude Data.Complex> exp $ 2 * log 0 :: Complex Double
NaN :+ NaN
Prelude Data.Complex> log 0 :: Complex Double
(-Infinity) :+ 0.0
Prelude Data.Complex> 2 * it :: Complex Double
(-Infinity) :+ NaN
Prelude Data.Complex> exp it :: Complex Double
NaN :+ NaN

So Complex uses the default implementation of **. Then when 2*(-inf :+ 0) 
is evaluated. We do (2 * -inf - 0*0) :+ (2*0 + -inf*0). Which because of 
-inf*0 sets the imaginary part to NaN. 

Then exp (-inf :+ NaN) = exp x cos y :+ exp x sin y which becomes 0 * cos 
NaN :+ 0 * sin NaN. So we end up with NaN :+ NaN.

So is there a library I should be using, or is this a bug?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131117/e700ba3e/attachment.html>


More information about the Haskell-Cafe mailing list