C HISTOGRAM FOR RNOR C PARAMETER(NBINS=32,A=-3.0,B=3.0) INTEGER ISEED,I,J,H(NBINS),NR,INBIN REAL R,RNOR,RSTART,RSEED,WIDTH C ISEED = 305 RSEED = RSTART(ISEED) WIDTH=(B-A)/(NBINS-2) CCCCCC 100 WRITE (*,*) 'EX 10.1: ENTER NUMBER OF NORMALS : ' DO 200 I = 1,NBINS H(I)=0 200 CONTINUE CCCCC READ (*,*) NR WRITE (*,*) 'RUNNING 10,000 NORMALS INTO 32 BINS...' NR = 10000 IF (NR .LE. 0) STOP DO 1 I = 1,NR R = RNOR() J = INBIN(A,B,NBINS,WIDTH,R) H(J) = H(J)+1 1 CONTINUE C WRITE (*,*) 'HISTOGRAM FOR RNOR: NUMBER IN BIN 1,...,32' WRITE (*,*) ' (-INFINITY,-3],(-3,-2.8],...,(2.8,3],(3,INFINITY)' WRITE (*,*) ' (VALUES ARE SLIGHTLY COMPUTER DEPENDENT)' WRITE (*,'(9I8)') (H(I),I=1,NBINS) C WRITE (*,*) WRITE (*,*) * 'REFERENCE RESULTS FROM IBM PC/AT ' WRITE(*,*)' 16 10 20 34 56 104 125 * 181 267' WRITE(*,*)' 317 442 542 621 706 751 787 * 814 768' WRITE(*,*)' 665 622 536 441 339 289 199 * 131 84' WRITE(*,*)' 39 35 31 11 17' STOP END C INTEGER FUNCTION INBIN (XMIN,XMAX,NBINS,WIDTH,DATA) C C This function takes a real value in DATA, and finds C the correct bin for it. Vales below XMIN come back C in 1. Values above XMAX come back in NBINS. C INTEGER NBINS REAL XMIN,XMAX,WIDTH,DATA IF (DATA .LT. XMIN) THEN INBIN = 1 ELSE IF (DATA .GE. XMAX) THEN INBIN = NBINS ELSE INBIN = 2 + (DATA-XMIN)/WIDTH ENDIF RETURN END