; Return element i,j of infinite matrix A Procedure.d A(i, j) ProcedureReturn 1.0 / ((i + j) * (i + j + 1) / 2 + i + 1) EndProcedure ; multiply vector v by matrix A Procedure MultiplyAv(n, Array v.d(1), Array Av.d(1)) For i = 0 To n - 1 Av(i) = 0 For j = 0 To n - 1 Av(i) = Av(i) + A(i, j) * v(j) Next j Next i EndProcedure ; multiply vector v by matrix A transposed Procedure MultiplyAtv(n, Array v.d(1), Array Atv.d(1)) For i = 0 To n - 1 Atv(i) = 0 For j = 0 To n - 1 Atv(i) = Atv(i) + A(j, i) * v(j) Next j Next i EndProcedure ; multiply vector v by matrix A And then by matrix A transposed Procedure MultiplyAtAv(n, Array v.d(1), Array AtAv.d(1)) Dim u.d(n) MultiplyAv(n, v(), u()) MultiplyAtv(n, u(), AtAv()) EndProcedure Procedure.d Approximate(n) Dim u.d(n) Dim v.d(n) For i = 0 To n - 1 u(i) = 1 Next For i = 1 To 10 MultiplyAtAv(n, u(), v()) MultiplyAtAv(n, v(), u()) Next vBv.d = 0 vv.d = 0 For i = 0 To n - 1 vBv = vBv + u(i) * v(i) vv = vv + v(i) * v(i) Next ProcedureReturn Sqr(vBv / vv) EndProcedure OpenConsole() n = 100 If CountProgramParameters() > 0 n = Val(ProgramParameter(0)) EndIf PrintN(StrD(Approximate(n), 9))