Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / metrics / jint / sunspider / math-spectral-norm.js
1 // The Great Computer Language Shootout
2 // http://shootout.alioth.debian.org/
3 //
4 // contributed by Ian Osgood
5
6 function A(i,j) {
7   return 1/((i+j)*(i+j+1)/2+i+1);
8 }
9
10 function Au(u,v) {
11   /* BEGIN LOOP */
12   for (var i=0; i<u.length; ++i) {
13     var t = 0;
14   /* BEGIN LOOP */
15     for (var j=0; j<u.length; ++j)
16       t += A(i,j) * u[j];
17   /* END LOOP */
18     v[i] = t;
19   }
20   /* END LOOP */
21 }
22
23 function Atu(u,v) {
24   /* BEGIN LOOP */
25   for (var i=0; i<u.length; ++i) {
26     var t = 0;
27   /* BEGIN LOOP */
28     for (var j=0; j<u.length; ++j)
29       t += A(j,i) * u[j];
30   /* END LOOP */
31     v[i] = t;
32   }
33   /* END LOOP */
34 }
35
36 function AtAu(u,v,w) {
37   Au(u,w);
38   Atu(w,v);
39 }
40
41 function spectralnorm(n) {
42   var i, u=[], v=[], w=[], vv=0, vBv=0;
43   /* BEGIN LOOP */
44   for (i=0; i<n; ++i) {
45     u[i] = 1; v[i] = w[i] = 0;
46   }
47   /* END LOOP */
48   /* BEGIN LOOP */
49   for (i=0; i<10; ++i) {
50     AtAu(u,v,w);
51     AtAu(v,u,w);
52   }
53   /* END LOOP */
54   /* BEGIN LOOP */
55   for (i=0; i<n; ++i) {
56     vBv += u[i]*v[i];
57     vv  += v[i]*v[i];
58   }
59   /* END LOOP */
60   return Math.sqrt(vBv/vv);
61 }
62
63   /* BEGIN LOOP */
64 for (var i = 6; i <= 48; i *= 2) {
65     spectralnorm(i);
66 }
67   /* END LOOP */