On Friday 08 October 2010 14:08:01, Daniel Fischer wrote: > On a related note, in my benchmarks, > > truncFloatGen :: Integral a => Float -> a > truncFloatGen = fromInteger . truncFloatInteger > > truncFloatInteger :: Float -> Integer > truncFloatInteger x = > case decodeFloat x of > (m,e) | e == 0 -> m > | e < 0 -> > let s = -e > in if m < 0 > then - ((-m) `shiftR` s) > else m `shiftR` s > | otherwise -> m `shiftL` e > > is more than twice as fast as GHC.Float.float2Int, the corresponding for > Double almost twice as fast as double2Int. > > Can anybody confirm that the above is faster than float2Int on other > machines/architectures?
That one is more or less solved. For values inside the Int range, float2Int/double2Int are, as expected, much faster. Only for values outside the Int range the picture changes, and I benchmarked over a much larger range. Still odd that float2Int/double2Int degrade so badly outside the range. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe