Reid Thompson wrote: > Reid Thompson wrote: > > > > Ruby Elapsed 0.045477 > > > > > #!/usr/local/bin/ruby > > require 'rubygems' > require 'inline' > > BAILOUT = 16 > MAX_ITERATIONS = 1000 > > class Mandelbrot > > def initialize > puts "Rendering" > for y in -39...39 do > puts > for x in -39...39 do > i = iterate(x/40.0,y/40.0) > if (i == 0) > print "*" > else > print " " > end > end > end > end > > inline do |builder| > builder.c " > int iterate (double x, double y) > { > int BAILOUT = 16; > int MAX_ITERATIONS = 1000; > double cr = y-0.5; > double ci = x; > double zi = 0.0; > double zr = 0.0; > double zr2 = 0.0; > double zi2 = 0.0; > int i = 0; > double temp = 0.0; > > while (1) > { > i += 1; > temp = zr * zi; > zr2 = zr * zr; > zi2 = zi * zi; > zr = zr2 - zi2 + cr; > zi = temp + temp + ci; > > if ( zi2 + zr2 > BAILOUT) > { > return i; > } > if ( i > MAX_ITERATIONS) > { > return 0; > } > } > }" > end > > end > > > time = Time.now > Mandelbrot.new > puts > puts "Ruby Elapsed %f" % (Time.now - time) Using the functional language F#: 0.0400575999999999 on my laptop with 2GHz Pentium. let bailout = 16.0 let max_iterations = 1000 let iterate x y = let cr = y - 0.5 and ci = x and zi = 0.0 and zr = 0.0 in let rec loop zi zr i = if i > max_iterations then 0 else let temp = zr * zi and zr2 = zr * zr and zi2 = zi * zi in if zi2 + zr2 > bailout then i else loop (temp + temp + ci) (zr2 - zi2 + cr) (i + 1) in loop zi zr 1 let mandelbrot () = for y = -39 to 38 do print_endline ""; for x = -39 to 38 do let i = iterate (float x / 40.0) (float y / 40.0) in System.Console.Write( ( if 0 = i then "*" else " " ) ) done done let start_time = Sys.time () let _ = mandelbrot (); print_endline ""; System.Console.Write (Sys.time () - start_time)