[Haskell-cafe] Vedr: To my boss: The code is cool, but it is about 100 times slower than the old one...
Johan Tibell
johan.tibell at gmail.com
Thu Nov 29 23:08:12 CET 2012
On Thu, Nov 29, 2012 at 2:02 PM, Johan Tibell <johan.tibell at gmail.com> wrote:
> On Thu, Nov 29, 2012 at 2:01 PM, Daniel Fischer
> <daniel.is.fischer at googlemail.com> wrote:
>> 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.
>>
>> Yes, but the result is very different.
>
> Doh, I guess I didn't look at the output carefully enough.
One obvious error is that the C code has one loop go from 1..n where I
just naively assumed all loops go from 0..n-1. This fixes that:
outer i | i <= VNUM = inner (fromIntegral i) 0 >> outer (i + 1)
| otherwise = return ()
outer (1 :: Int)
Perhaps the other issue is that
word2Double (W# w) = D# (int2Double# (word2Int# w))
is possibly the wrong way and we need a word2Double#.
-- Johan
More information about the Haskell-Cafe
mailing list