
On Sat, Aug 8, 2009 at 18:17, Henning Thielemann < lemming@henning-thielemann.de> wrote:
On Sat, 8 Aug 2009, Paul Sargent wrote:
First post to the cafe, so "Hello everybody!".
Hope this is reasonable subject matter and not too long.
I've been working on some algorithms that involved taking the n-th root of complex numbers. In my code I've implemented this as raising the complex number ('z') to 1/n using the (**) operator. Obviously, there are n roots, but I only need one of them so this is fine.
I have written something on that topic: http://haskell.org/haskellwiki/Power_function
I think the problem cannot be fully solved, especially not within the Haskell 98 numeric type classes. There is no satisfying implementation of (**) even for Float and Double.
Well, I'm an engineer rather than a mathematician, so I'm not 100% sure I followed everything on that page, but you seem to be saying that nth-root can't be done because we're using floating point, and floating point isn't accurate enough to represent 1/n. I basically agree with this, which was why I asked about nth-root functions, but for my uses (**) is good enough as long as complex zero works. (To be honest I'd expect any complex nth-root function to work with the polar form, there-by getting around some of the issues I think you're referring to.)