Average loop length: Difference between revisions
Content added Content deleted
(→{{header|Scala}}: migrate to Scala 2.13) |
m (swapped Seed7 with Simula, so they are in alphabetical order) |
||
Line 2,329: | Line 2,329: | ||
20 5.2717 5.2935 (-0.41%) |
20 5.2717 5.2935 (-0.41%) |
||
</pre> |
</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}}== |
=={{header|Seed7}}== |
||
Line 2,511: | Line 2,420: | ||
20 5.2907 5.2936 0.054 |
20 5.2907 5.2936 0.054 |
||
</pre> |
</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}}== |
=={{header|Tcl}}== |