[Haskell-beginners] Performance of Idiomatic lazy Haskell

Markus Böhm markus.boehm at googlemail.com
Mon Feb 1 04:37:41 EST 2010


Daniel, Stephen, Felipe thanks for Your answers/advice, which I
studied this morning. Helps me a lot on my learning curve. I guess it
takes some time to get a feeling for the performance/runtime behaviour
of abstractions in Haskell.

Just for fun and w/o knowing Lua: I translated my Haskell
"loops-while"-version into Lua and ran on LuaJit Beta 2.0.0. Seems to
beat our best Haskell version.

print("EPS: ")
EPS = io.read("*number")
pi2 = 1
i = 3
s = false
repeat
    pi1 = pi2
    if s then
        pi2 = pi1 + 1.0/i
        s = false
    else
        pi2 = pi1 - 1.0/i
        s = true
    end
    i = i+2

until EPS > 4.0 * math.abs(pi2-pi1)

print("PI mit EPS", EPS," = ",4*pi1," n= ",(i-3)/2)


-- Markus




On Sun, Jan 31, 2010 at 9:43 PM, Daniel Fischer
<daniel.is.fischer at web.de> wrote:
> Am Sonntag 31 Januar 2010 20:22:56 schrieb Stephen Tetley:
>> On my machine, they diverged at the eighth decimal place -
>>
>> Leibniz4 3.1415926526069526
>> Leibniz1 3.1415926445727678
>
> Ah, that. I thought you were talking about timings.
>
> There are several things that can lead to differing results here,
>
> 1) order of summation (I think only my loop had a different order)
> 2) due to different tests, it might happen that one algorithm evaluates one
> term more than the other
> 3) are intermediate results truncated to 64 bits or kept in an 80-bit
> register?
>
> I'm astonished by the size of the difference, though.
>
> But if you sum from small to large, the results are very accurately the
> theoretically expected results, so I think it's 1) together with 3) which
> make the difference.
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
>


More information about the Beginners mailing list