
Haskell doesn't know much about infinity, but Haskell implementations are
allowed to use IEEE floating point which has infinity.
And to get things right, there needs to be a few changes to the library to
do the right thing for certain numbers, this is not news. In fact I filed a
bug report a while back about it.
-- Lennart
On 8/4/07, Andrew Coppin
Paul Johnson wrote:
Andrew Coppin wrote:
0**2 0
(0 :+ 0)**2 NaN :+ NaN
(Is this a bug?) According to the Standard Prelude, # x ** y = exp (log x * y)
I had a feeling this would be the cause.
log 0 -Infinity
Oh. So... since when does Haskell know about infinity?
BTW, I recently had some code like this:
foo x | x < 0 = ... | x == 0 = ... | x > 0 = ...
I was most perplexed when I got a "non-exhaustive patterns" exception... It turns out there was a NaN in there. I forget about that.
exp (log 0 * 2) 0.0
Well that's interesting. I did wonder why it *doesn't* break in the real case...
On to the complex number case. From the standard for Complex:
# log z = log (magnitude z) :+ phase z
# phase (0 :+ 0) = 0 This is a special case for the phase of zero.
# (x:+y) * (x':+y') = (x*x'-y*y') :+ (x*y'+y*x')
log (0 :+ 0) (-Infinity) :+ 0.0
log (0 :+ 0) * 2 (-Infinity) :+ NaN
Which is the source of the problem. The imaginary part involves multiplying (-Infinity) by the imaginary part of 2 (i.e. 0), which is NaN.
Um... why would infinity * 0 be NaN? That doesn't make sense...
So no, its not a bug, its according to the standard.
So I'm the only person who was expecting zero squared to be zero? (IMHO the standard should try to implement mathematical operations in a mathematically sensible way...)
While working through this I also came across the following case which technically is a bug:
0 ** 0 1.0
exp (log 0 * 0) NaN
I suspect that GHCi is using a built-in exponentiation operator that doesn't quite conform to the standard in this case.
Now that really *is* odd...
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe