# Copied with little modifications from: https://github.com/attractivechaos/plb/blob/master/matmul/matmul_v1.rb def matmul(a, b) m = a.size n = a[0].size p = b[0].size # transpose b2 = Array.new(n) { Array.new(p, 0.0) } (0...n).each do |i| (0...p).each do |j| b2[j][i] = b[i][j] end end # multiplication c = Array.new(m) { Array.new(p, 0.0) } (0...m).each do |i| (0...p).each do |j| s = 0.0 ai, b2j = a[i], b2[j] (0...n).each do |k| s += ai[k] * b2j[k] end c[i][j] = s end end c end def matgen(n) tmp = 1.0 / n / n a = Array.new(n) { Array.new(n, 0.0) } (0...n).each do |i| (0...n).each do |j| a[i][j] = tmp * (i - j) * (i + j) end end a end n = (ARGV[0]? || 500).to_i n = n // 2 * 2 a = matgen(n) b = matgen(n) c = matmul(a, b) puts c[n // 2][n // 2]