Opened 7 months ago

#16340 new task

Improve properFraction for Ratio

Reported by: dfeuer Owned by:
Priority: normal Milestone: 8.10.1
Component: Core Libraries Version: 8.6.3
Keywords: Cc:
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: Runtime performance bug Test Case:
Blocked By: Blocking:
Related Tickets: Differential Rev(s):
Wiki Page:


We define

    properFraction (x:%y) = (fromInteger (toInteger q), r:%y)
      where (q, r) = quotRem x y

The first problem is that this produces a lazy pair. The second problem is that it uses fromInteger . toInteger rather than fromIntegral; the latter has rewrite rules that the former lacks. The whole thing should be written as

    properFraction (x:%y) = (q', r:%y)
      where !(q, r) = quotRem x y
            !q' = fromIntegral q

or possibly

    properFraction (x:%y) = (fromIntegral q, r:%y)
      where !(q, r) = quotRem x y

The latter is better if someone only wants the fractional part and is using Integral types for which fromIntegral is unusually expensive, but I don't know if that's really worth worrying about.

Change History (0)

Note: See TracTickets for help on using tickets.