-- Test Integer performanc, from Sergey Mechveliani {- Earlier, i presented a benchmark to compare the Int vs Integer performance. It has to be improved. For, increasing d from proposed d = 40 on, brings in the numbers that may be large enough to spoil the test. The enclosed script contains a slight modification - mostly, max' instead of sum. This settles everything. ------------------ Sergey Mechveliani mechvel@botik.ru -} -------------------------------------------------------------------- -- choose d from [100..9000] and switch Z = Int,Integer type Z = Integer main = -- compute extendedGCD x y = (g,u,v) -- for many x,y and find maximum [abs (g+u+v)] let d = 200 :: Z (n,m) = (5000,10000) :: (Z,Z) ns = [n..(n+d)] ms = [m..(m+d)] pairs = [(x,y)| x<-ns, y<-ms] -- (d+1)^2 of pairs tripls = map (\ (x,y)->(x,y,gcdE x y)) pairs rs = map (\ (_,_,(g,u,v))-> abs (g+u+v)) tripls max' [x] = x max' (x:y:xs) = if x (d,u,v): d = gcd(x,y) = u*x + v*y gcdE :: Integral a => a -> a -> (a,a,a) gcdE 0 y = (y,0,1) gcdE x y = g (1,0,x) (0,1,y) where g (u1,u2,u3) (v1,v2,v3) = if v3==0 then (u3,u1,u2) else case quotRem u3 v3 of (q,r) -> g (v1,v2,v3) (u1-q*v1, u2-q*v2, r)