67 lines
2.2 KiB
COBOL
67 lines
2.2 KiB
COBOL
IDENTIFICATION DIVISION.
|
|
PROGRAM-ID. RANDOM.
|
|
AUTHOR. Bill Gunshannon
|
|
INSTALLATION. Home.
|
|
DATE-WRITTEN. 14 January 2022.
|
|
************************************************************
|
|
** Program Abstract:
|
|
** Able to get the Mean to be really close to 1.0 but
|
|
** couldn't get the Standard Deviation any closer than
|
|
** .3 to .4.
|
|
************************************************************
|
|
|
|
DATA DIVISION.
|
|
|
|
WORKING-STORAGE SECTION.
|
|
|
|
01 Sample-Size PIC 9(5) VALUE 1000.
|
|
01 Total PIC 9(10)V9(5) VALUE 0.0.
|
|
01 Arith-Mean PIC 999V999 VALUE 0.0.
|
|
01 Std-Dev PIC 999V999 VALUE 0.0.
|
|
01 Seed PIC 999V999.
|
|
01 TI PIC 9(8).
|
|
|
|
01 Idx PIC 99999 VALUE 0.
|
|
01 Intermediate PIC 9(10)V9(5) VALUE 0.0.
|
|
01 Rnd-Work.
|
|
05 Rnd-Tbl
|
|
OCCURS 1 TO 99999 TIMES DEPENDING ON Sample-Size.
|
|
10 Rnd PIC 9V9999999 VALUE 0.0.
|
|
|
|
PROCEDURE DIVISION.
|
|
|
|
Main-Program.
|
|
ACCEPT TI FROM TIME.
|
|
MOVE FUNCTION RANDOM(TI) TO Seed.
|
|
PERFORM WITH TEST AFTER VARYING Idx
|
|
FROM 1 BY 1
|
|
UNTIL Idx = Sample-Size
|
|
COMPUTE Intermediate =
|
|
(FUNCTION RANDOM() * 2.01)
|
|
MOVE Intermediate TO Rnd(Idx)
|
|
END-PERFORM.
|
|
PERFORM WITH TEST AFTER VARYING Idx
|
|
FROM 1 BY 1
|
|
UNTIL Idx = Sample-Size
|
|
COMPUTE Total = Total + Rnd(Idx)
|
|
END-PERFORM.
|
|
|
|
|
|
COMPUTE Arith-Mean = Total / Sample-Size.
|
|
DISPLAY "Mean: " Arith-Mean.
|
|
|
|
|
|
PERFORM WITH TEST AFTER VARYING Idx
|
|
FROM 1 BY 1
|
|
UNTIL Idx = Sample-Size
|
|
COMPUTE Intermediate =
|
|
Intermediate + (Rnd(Idx) - Arith-Mean) ** 2
|
|
END-PERFORM.
|
|
COMPUTE Std-Dev = Intermediate / Sample-Size.
|
|
|
|
|
|
DISPLAY "Std-Dev: " Std-Dev.
|
|
|
|
STOP RUN.
|
|
|
|
END PROGRAM RANDOM.
|