# spectral-norm Swift program

## source code

```/* The Computer Language Benchmarks Game
https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
contributed by Isaac Gouy
converted to Swift 3 by Sergo Beruashvili
*/

import Glibc
//import Darwin
import Foundation

func approximate(_ n: Int) -> Double {
var u = Array(repeating: 1.0, count: n)

var v = Array(repeating: 0.0, count: n)
for _ in 1...10 {
multiplyAtAv(n,u,&v)
multiplyAtAv(n,v,&u)
}

var vBv = 0.0, vv = 0.0
for i in 0..<n {
vBv += u[i]*v[i]
vv  += v[i]*v[i]
}

return sqrt(vBv/vv)
}

func a(_ i: Int, _ j: Int) -> Double {
let ij = i+j
return 1.0 / Double( ij*(ij+1)/2 + i+1 )
}

func multiplyAv(_ n: Int, _ v: [Double], _ av: inout [Double]) {
for i in 0..<n {
av[i] = 0.0;
for j in 0..<n {
av[i] += a(i,j)*v[j]
}
}
}

func multiplyAtv(_ n: Int, _ v: [Double], _ atv: inout [Double]) {
for i in 0..<n {
atv[i] = 0;
for j in 0..<n {
atv[i] += a(j,i)*v[j]
}
}
}

func multiplyAtAv(_ n: Int, _ v: [Double], _ atAv: inout [Double]) {
var u = Array(repeating: 0.0, count: n)
multiplyAv(n,v,&u)
multiplyAtv(n,u,&atAv)
}

let n: Int = Int(CommandLine.arguments[1])!
print( String(format: "%.9f", approximate(n)) )
```

## notes, command-line, and program output

```NOTES:
Swift version 5.8-dev
(LLVM 08f7fecaf6cedb8,
Swift 24fe6ae8532db5d)

Tue, 24 Jan 2023 06:38:57 GMT

MAKE:
/opt/src/swift-5.8-DEVELOPMENT-SNAPSHOT-2023-01-10-a-ubuntu22.04/usr/bin/swiftc spectralnorm.swift -Ounchecked  -o spectralnorm.swift_run

13.55s to complete and log all make actions

COMMAND LINE:
./spectralnorm.swift_run 5500

PROGRAM OUTPUT:
1.274224153
```