algol< begin comment N=61, no index check: Time classic: 603.71 Time turbo: 599.31 0.7pct N=61, index check: Time classic: 1407.11 Time turbo: 1250.24 11.1pct No buffer, N=21, index check: Time classic 67.66 Time turbo: 64.94 4.0pct No buffer, N=21, no index check: Time classic 36.59 Time turbo: 36.05 1.5pct ; procedure INVERT2(n, a, eps, ERROR); value n, eps; integer n; real eps; array a; label ERROR; begin integer i, j, k; real pivot, z; integer array p, q[1:n]; array b, c[1:n]; for k ≔ 1 step 1 until n do begin pivot ≔ 0; for i ≔ k step 1 until n do for j ≔ k step 1 until n do begin if abs(a[i,j]) > abs(pivot) then begin pivot ≔ a[i,j]; p[k] ≔ i; q[k] ≔ j end; end for; if abs(pivot) ⩽ eps then go_to ERROR; if p[k] ≠ k then for j ≔ 1 step 1 until n do begin z ≔ a[p[k], j]; a[p[k], j] ≔ a[k,j]; a[k,j] ≔ z end for; if q[k] ≠ k then for i ≔ 1 step 1 until n do begin z ≔ a[i, q[k]]; a[i, q[k]] ≔ a[i,k]; a[i,k] ≔ z end for; for j ≔ 1 step 1 until n do begin if j = k then begin b[j] ≔ 1/pivot; c[j] ≔ 1 end else begin b[j] ≔ − a[k,j]/pivot; c[j] ≔ a[j,k] end; a[k,j] ≔ a[j,k] ≔ 0 end for; for i ≔ 1 step 1 until n do for j ≔ 1 step 1 until n do begin a[i,j] ≔ a[i,j] + c[i]×b[j] end for; end for k; for k ≔ n step −1 until 1 do begin if p[k] ≠ k then for i ≔ 1 step 1 until n do begin z ≔ a[i, p[k]]; a[i, p[k]] ≔ a[i,k]; a[i,k] ≔ z end for; if q[k] ≠ k then for j ≔ 1 step 1 until n do begin z ≔ a[q[k], j]; a[q[k], j] ≔ a[k,j]; a[k,j] ≔ z end for; end k end INVERT2; real procedure clock count; code clock count; 1, 37; zl , grf p−1 ; RF ≔ clock count; stack[p−1] ≔ RF; e; integer Nmin,Nmax; integer oldrand,N,mod,new; Nmin ≔ 59; Nmax ≔ 61; mod ≔ 2796203; select(17); writecr; writetext(«oldrand: »); oldrand ≔ read integer; begin real time,maxerror,det; array xy[Nmin:Nmax,1:2]; for N ≔ Nmin step 1 until Nmax do begin array A[1:N,1:N]; integer i,j; real sum; writecr; write(«dd»,N); for i ≔ 1 step 1 until N do begin sum ≔ 0; for j ≔ 1 step 1 until N do begin new ≔ 125×oldrand; oldrand ≔ new−new÷mod×mod; A[i,j] ≔ oldrand/mod−0.5; end for; end; clock count; INVERT2(N, A, 1⏨−12, ERROR); goto OK; ERROR: writetext(«Error.»); OK: xy[N,2] ≔ clock count; xy[N,1] ≔ N; write(«dddddd.dd»,xy[N,2]); end for N; begin procedure FIT1(n, meanerror, a, b, x, y); value n; integer n; real meanerror, a, b; array x, y; begin integer j; real SX, SX2, SY, SXY, SY2, DEN; SX ≔ SX2 ≔ SY ≔ SXY ≔ SY2 ≔ 0; for j ≔ 1 step 1 until n do begin SX ≔ SX + x[j]; SX2 ≔ SX2 + x[j]⭡2; SY ≔ SY + y[j]; SXY ≔ SXY + x[j]×y[j]; SY2 ≔ SY2 + y[j]⭡2 end; DEN ≔ n×SX2 − SX⭡2; a ≔ (SX2×SY−SX×SXY)/DEN; b ≔ (n×SXY−SX×SY)/DEN; meanerror ≔ sqrt((SY2+(2×SX×SY×SXY−n×SXY⭡2−SX2×SY⭡2)/DEN)/(n−1)) end of FIT−1; array X,Y[1:Nmax−Nmin+1]; real a,b,meanerror,x1,y1,e1,meanerror2; integer i; for i ≔ Nmax−Nmin+1 step −1 until 1 do begin X[i] ≔ ln(xy[i+Nmin−1,1]); Y[i] ≔ ln(xy[i+Nmin−1,2]) end; FIT1(Nmax−Nmin+1, meanerror, a, b, X, Y); writecr; write(«−dddddd.dddddd»,meanerror,a,b); writecr; writetext(«Time: »); write(«−d.ddd⏨−d»,exp(a)); writetext(«×n⭡»); write(«d.ddd»,b); if false then begin for i ≔ Nmin step 1 until Nmax do begin x1 ≔ xy[i,1]; y1 ≔ exp(a)×x1⭡b; e1 ≔ y1−xy[i,2]; writecr; write(«ddd»,x1); write(«−dddddd.ddd»,xy[i,2],y1,e1); meanerror2 ≔ meanerror2+e1×e1 end; writecr; write(«−dddddd.ddd»,sqrt(meanerror2/(Nmax−Nmin))) end end fit end Nmin max end; t<