Ticket #4413 (new bug)
(^^) is not correct for Double and Float
| Reported by: | daniel.is.fischer | Owned by: | tcsavage |
|---|---|---|---|
| Priority: | low | Milestone: | 7.6.2 |
| Component: | libraries/base | Version: | 7.1 |
| Keywords: | Double, Float, exponentiation | Cc: | |
| Operating System: | Unknown/Multiple | Architecture: | Unknown/Multiple |
| Type of failure: | Incorrect result at runtime | Difficulty: | |
| Test Case: | Blocked By: | ||
| Blocking: | Related Tickets: |
Description
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?
Change History
Note: See
TracTickets for help on using
tickets.
