| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // The Computer Language Benchmarks Game
- // http://benchmarksgame.alioth.debian.org/
- // contributed by Mike Pall
- local function A(i, j){
- local ij = j + i++
- return 1.0/(ij++ * ij/2.0+i);
- }
- local function Av(x, y, N){
- local A = A;
- for(local i=0; i < N; ++i){
- local a = 0
- for(local j=0; j < N; ++j) a += x[j] * A(i, j)
- y[i] = a
- }
- }
- local function Atv(x, y, N){
- local A = A;
- for(local i=0; i < N; ++i){
- local a = 0
- for(local j=0; j < N; ++j) a += x[j] * A(j, i)
- y[i] = a
- }
- }
- local function AtAv(x, y, t, N){
- Av(x, t, N)
- Atv(t, y, N)
- }
- //check_delayed_release_hooks(false);
- local N = vargv.get(1, 500).tointeger();
- local start = os.clock()
- local u = array(N), v = array(N), t = array(N)
- for(local i=0; i < N; ++i) u[i] = 1
- for(local i=0; i < 10; ++i){
- AtAv(u, v, t, N)
- AtAv(v, u, t, N)
- }
- local vBv = 0.0, vv = 0.0
- for(local i=0; i < N; ++i){
- local ui = u[i], vi = v[i]
- vBv += ui*vi
- vv += vi*vi
- }
- local result = math.sqrt(vBv / vv);
- print("spectralnorm", N, os.clock()-start)
- print(format("%0.9f\n", result))
|