Average loop length: Difference between revisions

m (→‎{{header|Perl}}: 'print' not 'say')
Line 2,212:
20 5.2717 5.2935 (-0.41%)
</pre>
=={{header|Simula}}==
 
<lang simula>BEGIN
 
REAL PROCEDURE FACTORIAL(N); INTEGER N;
BEGIN
REAL RESULT;
INTEGER I;
RESULT := 1.0;
FOR I := 2 STEP 1 UNTIL N DO
RESULT := RESULT * I;
FACTORIAL := RESULT;
END FACTORIAL;
 
REAL PROCEDURE ANALYTICAL (N); INTEGER N;
BEGIN
REAL SUM, RN;
INTEGER I;
RN := N;
FOR I := 1 STEP 1 UNTIL N DO
BEGIN
SUM := SUM + FACTORIAL(N) / FACTORIAL(N - I) / RN ** I;
END;
ANALYTICAL := SUM;
END ANALYTICAL;
 
REAL PROCEDURE EXPERIMENTAL(N); INTEGER N;
BEGIN
INTEGER NUM;
INTEGER COUNT;
INTEGER RUN;
FOR RUN := 1 STEP 1 UNTIL TESTS DO
BEGIN
BOOLEAN ARRAY BITS(1:N);
INTEGER I;
FOR I := 1 STEP 1 UNTIL N DO
BEGIN
NUM := RANDINT(1,N,SEED);
IF BITS(NUM) THEN GOTO L;
BITS(NUM) := TRUE;
COUNT := COUNT + 1;
END FOR I;
L:
END FOR RUN;
EXPERIMENTAL := COUNT / TESTS;
END EXPERIMENTAL;
 
INTEGER SEED, TESTS;
SEED := ININT;
TESTS := 1000000;
BEGIN
REAL A, E, ERR;
INTEGER I;
OUTTEXT(" N AVG CALC %DIFF"); OUTIMAGE;
FOR I := 1 STEP 1 UNTIL 20 DO
BEGIN
A := ANALYTICAL(I);
E := EXPERIMENTAL(I);
ERR := (ABS(E-A)/A)*100.0;
OUTINT(I, 2);
OUTFIX(E, 4, 7);
OUTFIX(A, 4, 10);
OUTFIX(ERR, 4, 10);
OUTIMAGE;
END FOR I;
END;
END</lang>
{{in}}
<pre>678</pre>
{{out}}
<pre> N AVG CALC %DIFF
1 1.0000 1.0000 0.0000
2 1.4999 1.5000 0.0075
3 1.8890 1.8889 0.0072
4 2.2182 2.2188 0.0243
5 2.5105 2.5104 0.0027
6 2.7746 2.7747 0.0025
7 3.0164 3.0181 0.0590
8 3.2447 3.2450 0.0110
9 3.4567 3.4583 0.0453
10 3.6622 3.6602 0.0539
11 3.8503 3.8524 0.0546
12 4.0373 4.0361 0.0300
13 4.2105 4.2123 0.0445
14 4.3819 4.3820 0.0027
15 4.5475 4.5458 0.0376
16 4.7056 4.7043 0.0295
17 4.8559 4.8579 0.0396
18 5.0105 5.0071 0.0694
19 5.1541 5.1522 0.0376
20 5.2961 5.2936 0.0467</pre>
 
=={{header|Seed7}}==
Anonymous user