UNPKG

1.27 kBPlain TextView Raw
1// https://benchmarksgame.alioth.debian.org/u64q/program.php?test=spectralnorm&lang=typescript&id=1
2
3function approximate(n: number): number {
4 let u = Array(n), v = Array(n)
5 for (let i = 0; i < n; ++i) {
6 u[i] = 1.0
7 }
8 for (let i = 0; i < 10; ++i) {
9 multiplyAtAv(n, u, v)
10 multiplyAtAv(n, v, u)
11 }
12 let vBv = 0.0, vv = 0.0
13 for (let i = 0; i < 10; ++i) {
14 vBv += u[i] * v[i]
15 vv += v[i] * v[i]
16 }
17 return Math.sqrt(vBv / vv)
18}
19
20function a(i, j: number): number {
21 return 1.0 / ((i + j) * ((i + j) + 1) / 2 + i + 1)
22}
23
24function multiplyAv(n: number, v: number[], av: number[]) {
25 for (let i = 0; i < n - 1; ++i) {
26 av[i] = 0.0
27 for (let j = 0; j < n - 1; ++j) {
28 av[i] += a(i, j) * v[j]
29 }
30 }
31}
32
33function multiplyAtv(n: number, v: number[], atv: number[]) {
34 for (let i = 0; i < n - 1; ++i) {
35 atv[i] = 0.0
36 for (let j = 0; j < n - 1; ++j) {
37 atv[i] += a(j, i) * v[j]
38 }
39 }
40}
41
42function multiplyAtAv(n: number, v: number[], atAv: number[]) {
43 let u = new Array(n)
44 multiplyAv(n, v, u)
45 multiplyAtv(n, u, atAv)
46}
47
48{
49 let start = Date.now()
50 echo(approximate(5500).toFixed(9))
51 echo(Date.now() - start + "ms")
52}