[GHC] #8539: Data.Complex shouldn't use default implementation of (**)
GHC
ghc-devs at haskell.org
Mon Apr 28 10:35:41 UTC 2014
#8539: Data.Complex shouldn't use default implementation of (**)
-------------------------------------+-------------------------------------
Reporter: jjaredsimpson | Owner:
Type: bug | Status: patch
Priority: low | Milestone:
Component: Prelude | Version: 7.6.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: Incorrect result | Difficulty: Easy (less than 1
at runtime | hour)
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+-------------------------------------
Comment (by yalas):
I think x raised to 0 must always be equal 1. Even for NaN:
{{{
Prelude> (1/0*0) :: Double
NaN
Prelude> (1/0*0) ** 0 :: Double
1.0
}}}
New complex power implementation:
{{{
_ ** (0:+0) = 1 :+ 0
x ** (1:+0) = x
(x:+0) ** (y:+0)
| x >= 0 = (x ** y) :+ 0
x ** y = exp (log x * y)
}}}
But what about raising zero to complex power?
Current implementation gets NaN:
{{{
Prelude Data.Complex> exp $ log 0 * (1:+1) :: Complex Double
NaN :+ NaN
}}}
Python throws an exception:
{{{
>>> 0**(1+1j)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: 0.0 to a negative or complex power
}}}
But wolphramalpha gets
[https://www.wolframalpha.com/input/?i=0%5E%281%2B1i%29 0],
[https://www.wolframalpha.com/input/?i=0%5E%28-1%2B1i%29 infinity] or
[https://www.wolframalpha.com/input/?i=0%5E%281i%29 indeterminate].
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8539#comment:8>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list