source code
-- The Computer Language Benchmarks Game
-- https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
-- contributed by Mike Pall
local function A(i, j)
local ij = i+j-1
return 1.0 / (ij * (ij-1) * 0.5 + i)
end
local function Av(x, y, N)
for i=1,N do
local a = 0
for j=1,N do a = a + x[j] * A(i, j) end
y[i] = a
end
end
local function Atv(x, y, N)
for i=1,N do
local a = 0
for j=1,N do a = a + x[j] * A(j, i) end
y[i] = a
end
end
local function AtAv(x, y, t, N)
Av(x, t, N)
Atv(t, y, N)
end
local N = tonumber(arg and arg[1]) or 100
local u, v, t = {}, {}, {}
for i=1,N do u[i] = 1 end
for i=1,10 do AtAv(u, v, t, N) AtAv(v, u, t, N) end
local vBv, vv = 0, 0
for i=1,N do
local ui, vi = u[i], v[i]
vBv = vBv + ui*vi
vv = vv + vi*vi
end
io.write(string.format("%0.9f\n", math.sqrt(vBv / vv)))
notes, command-line, and program output
NOTES:
64-bit Ubuntu quad core
Lua 5.4.0 Copyright (C) 1994-2020 Lua.org, PUC-Rio
Wed, 01 Jul 2020 00:29:24 GMT
COMMAND LINE:
/opt/src/lua-5.4.0/bin/lua spectralnorm.lua 5500
PROGRAM OUTPUT:
1.274224153