[Haskell-cafe] Vedr: To my boss: The code is cool, but it is about 100 times slower than the old one...

Daniel Fischer daniel.is.fischer at googlemail.com
Thu Nov 29 23:07:56 CET 2012


On Donnerstag, 29. November 2012, 13:40:42, Johan Tibell wrote:
> 
> word2Double :: Word -> Double
> word2Double (W# w) = D# (int2Double# (word2Int# w))
> 
> On my (64-bit) machine the Haskell and C versions are on par.

On my box, the Haskell is even faster then, but, as said, the result is 
incorrect

With

correction :: Double
correction = 2 * int2Double minBound

word2Double :: Word -> Double
word2Double w = case fromIntegral w of
                   i | i < 0 -> int2Double i - correction
                     | otherwise -> int2Double i

I get

real    0m0.078s
user    0m0.077s
sys     0m0.001s

with correct results.

Okay, we **need** a better Word -> Double etc. conversion. We could start with 
the above, that seems not too shabby.



More information about the Haskell-Cafe mailing list