begin
library A1, A4, A5, A15;
integer j, n, calls;
real procedure ICR;
kdf9 2/0/0/0;
SET 99; OUT; SET 47; FLOAT; exit
algol
real procedure Time;
kdf9 2/0/0/0;
SET 17; OUT; SET 23; FLOAT; exit
algol
real t1, t2, i1, i2;
integer procedure Ackermann(m, n); value m, n; integer m, n;
begin
HEAD:
if m = 0 then
Ackermann := n + 1
else if n = 0 then
begin
m := m - 1;
n := 1;
goto HEAD
end
else
begin
n := Ackermann(m, n - 1);
m := m - 1;
goto HEAD
end
end Ackermann;
n := 7;
calls := 128*4^n;
calls := calls - 120*2^n;
calls := calls + 9*n + 37;
calls := calls/3;
writetext(30, {{c}calls __ =});
write(30, format({nddddddc}), calls);
t1 := Time; i1 := ICR;
j := Ackermann(3, 7);
i2 := ICR - i1; t2 := Time - t1;
writetext(30, {{c}A(3,});
write(30, format({d}), n);
writetext(30, {) _ = _});
write(30, format({ndddc}), j);
writetext(30, {{c}microseconds_per_call _ _ _ _ _ _ _ _ _ =});
write(30, format({nddd}), t2/calls*1 000 000);
writetext(30, {{c}instructions_per_call _ _ _ _ _ _ _ _ _=});
write(30, format({nndd}), i2/calls);
writetext(30, {{c}microseconds_per_instruction _ _ =});
write(30, format({ssnd.ddc}), t2/i2*1 000 000);
end
|