Skip to content

(^^) is not correct for Double and Float

Consider

Prelude> 2 ^^ (-1024)
0.0
Prelude> 0.5 ^^ 1024
5.562684646268003e-309

The cause is

x ^^ n          =  if n >= 0 then x^n else recip (x^(negate n))

If we change it to

x ^^ n          =  if n >= 0 then x^n else ((recip x)^(negate n))

it'll do the right thing for Double and Float, and I don't know of any type where it would produce incorrect results.

Does it need a library proposal or can the change be made without?

Trac metadata
Trac field Value
Version 7.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component libraries/base
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information