66 lines
1.4 KiB
Plaintext
66 lines
1.4 KiB
Plaintext
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
|