RealFrac methods for Double and Float

Daniel Fischer at
Mon Oct 11 15:12:12 EDT 2010

On Monday 11 October 2010 04:44:24, Antoine Latter wrote:

> I have results from my Intel-based MacBook, 64-bits, GHC 7 rc.

> Results from ncgFloat:
> Relations for properFraction:
>   Prelude          1.000000
>   C via Integer    0.333999
>   Hs via Integer   0.499852
>   C Int            4.417461
>   Hs Int           4.558648

Puzzle solved. I have run the benchmarks with the latest HEAD and got 
broadly similar results.

GHC's new code generator does some incredible stuff with the code for 
Float's RealFrac instance, properFraction has become about _seven times_ 
faster, floor and ceiling about _thirteen times_ and round about _10.5 
times_ (values for my box, the exact numbers will differ, but the tendency 
will be the same).

Just Wow!

My code for properFraction :: Float -> (Integer, Float) has become 1.7 
times slower when calling out to C, everything else has either changed 
hardly at all or become slightly faster (5-10%).

The overall result is that for Float, in the general case, the current 
implementation is faster and overall the speedups are less impressive than 
they were for 6.12.

So I'll have to re-learn what GHC does with which kind of code.


More information about the Libraries mailing list