Average loop length: Difference between revisions

m
swapped Seed7 with Simula, so they are in alphabetical order
(→‎{{header|Scala}}: migrate to Scala 2.13)
m (swapped Seed7 with Simula, so they are in alphabetical order)
Line 2,329:
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}}==
Line 2,511 ⟶ 2,420:
20 5.2907 5.2936 0.054
</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|Tcl}}==
2,747

edits