From 758267254d204e61ea1ac81d00d9cd814aff8448 Mon Sep 17 00:00:00 2001
From: pverghese
Date: Sat, 6 Jul 2019 19:59:50 +0530
Subject: [PATCH] Added Benchmark-games: spectralnorm
---
examples/spectral.v | 73 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
create mode 100644 examples/spectral.v
diff --git a/examples/spectral.v b/examples/spectral.v
new file mode 100644
index 0000000000..dd72f553fe
--- /dev/null
+++ b/examples/spectral.v
@@ -0,0 +1,73 @@
+/*
+https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/spectralnorm.html
+Added: Pradeep Verghese
+
+*/
+
+module main
+import math
+import os
+
+
+fn evala(i, j int) int {
+ return ((i+j)*(i+j+1)/2 + i + 1)
+}
+
+fn (v mut []f64) times(u []f64) {
+ for i := 0; i < v.len; i++ {
+ mut a := f64(0)
+ for j :=0; j< u.len; j++ {
+ a += u[j] /f64(evala(i,j))
+ }
+ v[i] = a
+ }
+}
+
+fn (v mut []f64) times_trans(u []f64) {
+ for i := 0; i< v.len; i++ {
+ mut a := f64(0)
+ for j :=0; j< u.len; j++ {
+ a += u[j] / f64(evala(j,i))
+ }
+ v[i] = a
+ }
+}
+
+fn (v mut []f64) a_times_transp(u []f64) {
+ mut x := [f64(0); u.len]
+ x.times(u)
+ v.times_trans(x)
+}
+
+fn main() {
+
+ args := os.args
+ mut n := int(0)
+
+ if args.len == 2 {
+ n = args[1].int()
+ }
+ else {
+ n = 0
+ }
+ mut u := [f64(1.0);n]
+ mut v := [f64(1.0);n]
+
+ for i := 0; i< 10; i++ {
+ v.a_times_transp(u)
+ u.a_times_transp(v)
+ }
+
+ mut vbv := f64(0)
+ mut vv := f64(0)
+
+ for i :=0; i< n; i++ {
+ vbv += u[i] * v[i]
+ vv += v[i] * v[i]
+ }
+ ans := math.sqrt(vbv/vv)
+
+ println('${ans:0.9f}')
+
+
+}