1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/sunspider/check-math-spectral-norm.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,53 @@ 1.4 +// The Great Computer Language Shootout 1.5 +// http://shootout.alioth.debian.org/ 1.6 +// 1.7 +// contributed by Ian Osgood 1.8 + 1.9 +function A(i,j) { 1.10 + return 1/((i+j)*(i+j+1)/2+i+1); 1.11 +} 1.12 + 1.13 +function Au(u,v) { 1.14 + for (var i=0; i<u.length; ++i) { 1.15 + var t = 0; 1.16 + for (var j=0; j<u.length; ++j) 1.17 + t += A(i,j) * u[j]; 1.18 + v[i] = t; 1.19 + } 1.20 +} 1.21 + 1.22 +function Atu(u,v) { 1.23 + for (var i=0; i<u.length; ++i) { 1.24 + var t = 0; 1.25 + for (var j=0; j<u.length; ++j) 1.26 + t += A(j,i) * u[j]; 1.27 + v[i] = t; 1.28 + } 1.29 +} 1.30 + 1.31 +function AtAu(u,v,w) { 1.32 + Au(u,w); 1.33 + Atu(w,v); 1.34 +} 1.35 + 1.36 +function spectralnorm(n) { 1.37 + var i, u=[], v=[], w=[], vv=0, vBv=0; 1.38 + for (i=0; i<n; ++i) { 1.39 + u[i] = 1; v[i] = w[i] = 0; 1.40 + } 1.41 + for (i=0; i<10; ++i) { 1.42 + AtAu(u,v,w); 1.43 + AtAu(v,u,w); 1.44 + } 1.45 + for (i=0; i<n; ++i) { 1.46 + vBv += u[i]*v[i]; 1.47 + vv += v[i]*v[i]; 1.48 + } 1.49 + return Math.sqrt(vBv/vv); 1.50 +} 1.51 + 1.52 +var actual = ''; 1.53 +for (var i = 6; i <= 48; i *= 2) { 1.54 + actual += spectralnorm(i) + ','; 1.55 +} 1.56 +assertEq(actual, "1.2657786149754053,1.2727355112619148,1.273989979775574,1.274190125290389,");