1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/devtools/jint/sunspider/math-spectral-norm.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,67 @@ 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 + /* BEGIN LOOP */ 1.15 + for (var i=0; i<u.length; ++i) { 1.16 + var t = 0; 1.17 + /* BEGIN LOOP */ 1.18 + for (var j=0; j<u.length; ++j) 1.19 + t += A(i,j) * u[j]; 1.20 + /* END LOOP */ 1.21 + v[i] = t; 1.22 + } 1.23 + /* END LOOP */ 1.24 +} 1.25 + 1.26 +function Atu(u,v) { 1.27 + /* BEGIN LOOP */ 1.28 + for (var i=0; i<u.length; ++i) { 1.29 + var t = 0; 1.30 + /* BEGIN LOOP */ 1.31 + for (var j=0; j<u.length; ++j) 1.32 + t += A(j,i) * u[j]; 1.33 + /* END LOOP */ 1.34 + v[i] = t; 1.35 + } 1.36 + /* END LOOP */ 1.37 +} 1.38 + 1.39 +function AtAu(u,v,w) { 1.40 + Au(u,w); 1.41 + Atu(w,v); 1.42 +} 1.43 + 1.44 +function spectralnorm(n) { 1.45 + var i, u=[], v=[], w=[], vv=0, vBv=0; 1.46 + /* BEGIN LOOP */ 1.47 + for (i=0; i<n; ++i) { 1.48 + u[i] = 1; v[i] = w[i] = 0; 1.49 + } 1.50 + /* END LOOP */ 1.51 + /* BEGIN LOOP */ 1.52 + for (i=0; i<10; ++i) { 1.53 + AtAu(u,v,w); 1.54 + AtAu(v,u,w); 1.55 + } 1.56 + /* END LOOP */ 1.57 + /* BEGIN LOOP */ 1.58 + for (i=0; i<n; ++i) { 1.59 + vBv += u[i]*v[i]; 1.60 + vv += v[i]*v[i]; 1.61 + } 1.62 + /* END LOOP */ 1.63 + return Math.sqrt(vBv/vv); 1.64 +} 1.65 + 1.66 + /* BEGIN LOOP */ 1.67 +for (var i = 6; i <= 48; i *= 2) { 1.68 + spectralnorm(i); 1.69 +} 1.70 + /* END LOOP */