@@ -7,76 +7,65 @@ function OS()
77 return os.getenv (" SHELL" ) and " UNIX" or " Unknown"
88 end
99end
10-
1110function BS (name , iterations )
12- io.write (string.format (" %-9s" , name ) .. " \t " .. string.format (" %10s" , iterations ) .. " \t " )
13- io.flush ()
14- return os.clock ()
11+ local t = # tostring (iterations ) > 10 and string.format (" %10e" , iterations ):gsub (" %..-e" , " e" ) or iterations
12+ io.write (string.format (" %-9s" , name ) .. " \t " .. string.format (" %10s" , t ) .. " \t " ) io.flush () return os.clock ()
1513end
16-
1714function BE (start_time )
1815 local t = os.clock () - start_time
1916 local m , s = math.floor (t / 60 ), (t % 60 )
2017 io.write (string.format (" %7d:%09.6f\n " , m , s ))
2118end
22-
2319local function b_pi ()
24- local it , pi , si = 20000 , 3 , 1
20+ local it , pi , si = S , 3 , 1
2521 local b = BS (" Nilakantha Pi" , it )
2622 for i = 2 , it * 2 , 2 do
27- pi = pi + si * (4 / (i * (i + 1 ) * (i + 2 )))
28- si = - si
29- end
30- BE (b )
23+ pi = pi + si * (4 / (i * (i + 1 ) * (i + 2 ))) si = - si
24+ end BE (b )
3125end
3226local function b_gcd ()
33- local function gcd (a , b ) -- Function to compute the greatest common divisor
34- while b ~= 0 do a , b = b , a % b end
35- return a
36- end
37- local m , r = 5000 , 0
38- local b = BS (" Common Divisor" , m )
39- for i = 1 , m do local x = i local y = m - i + 1 r = gcd (x , y ) end BE (b )
27+ local function gcd (a , b ) while b ~= 0 do a , b = b , a % b end return a end
28+ local r , b = 0 , BS (" Common Divisor" , S )
29+ for i = 1 , S do local x = i local y = S - i + 1 r = gcd (x , y ) end BE (b )
4030end
4131local function b_mul ()
42- local m , r = 100000 , 1
43- local b = BS (" Multiplication" , m )
44- for _ = 1 , m do r = (r * 1.000000001 ) end BE (b )
32+ local r , b = 1 , BS (" Multiplication" , B )
33+ for _ = 1 , B do r = (r * 1.000000001 ) end BE (b )
4534end
4635local function b_div ()
47- local m , r = 100000 , 1
48- local b = BS (" Division" , m )
49- m = m + 1
36+ local m , r = B , 1
37+ local b = BS (" Division" , m ) m = m + 1
5038 for i = 2 , m do r = r / i end BE (b )
5139end
5240local function b_add ()
53- local r , m = 1 , 100000
54- local b = BS (" Addition" , m )
55- for i = 1 , m do r = r + i end BE (b )
41+ local r , b = 1 , BS (" Addition" , B )
42+ for i = 1 , B do r = r + i end BE (b )
5643end
5744local function b_flt ()
58- local r , m = 1.0 , 100000
59- local b = BS (" Float Addition" , m )
60- for _ = 1 , m do r = r + 0.01 end BE (b )
45+ local r , b = 1.0 , BS (" Float Addition" , B )
46+ for _ = 1 , B do r = r + 0.01 end BE (b )
6147end
6248local function b_sub ()
63- local r , m = 1 , 100000
64- local b = BS (" Subtraction" , m )
65- for i = m , 1 , - 1 do r = r - i end BE (b )
49+ local r , b = 1 , BS (" Subtraction" , B )
50+ for i = B , 1 , - 1 do r = r - i end BE (b )
6651end
6752local function b_arr ()
68- local m = 1000
69- local b = BS (" Array Loop" , m )
70- local a , s = {}, 0
71- for i = 1 , m do a [i ] = i % 10 end
72- for i = 1 , m do a [i ] = a [i ] * 2 end
73- for i = 1 , m do s = s + a [i ] end BE (b )
53+ local b , a , s = BS (" Array Loop" , S ), {}, 0
54+ for i = 1 , S do a [i ] = i % 10 end
55+ for i = 1 , S do a [i ] = a [i ] * 2 end
56+ for i = 1 , S do s = s + a [i ] end BE (b )
7457end
7558local function L () print (string.rep (' _' , 49 )) end
7659print (" Runtime:" , _VERSION )
7760print (" OS Family:" , OS ())
7861print (" Minimum Int:" , math.mininteger or " Unknown" )
7962print (" Maximum Int:" , math.maxinteger or " Unknown" )
63+ M = tonumber (arg [1 ])
64+ if not M or M < 1980 then
65+ print (" \n To benchmark, run again and specify a year > 1979" ) os.exit ()
66+ end
67+ print (" \n Running benchmark: " .. M ) M = (M - 1955 )/ 25
68+ B , S = math.floor (500 ^ M ), math.floor (100 ^ M )
8069print (" \n Benchmark" , " Iterations" , " Time (min:sec.ms)" )
8170L ()
8271b = os.clock ()
0 commit comments