ChipMaster's bwBASIC This also includes history going back to v2.10. *WARN* some binary files might have been corrupted by CRLF.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

183 lines
4.5 KiB

  1. 10 PRINT "PROGRAM FILE 134: KOMOLGOROV-SMIRNOV UNIFORMITY TEST FOR"
  2. 15 PRINT " RND FUNCTION."
  3. 20 PRINT " ANSI STANDARD 8.4"
  4. 30 PRINT
  5. 40 PRINT "SECTION 134.1: KOMOLGOROV-SMIRNOV UNIFORMITY TEST FOR"
  6. 50 PRINT " RND FUNCTION."
  7. 60 PRINT
  8. 70 PRINT "THIS PROGRAM RUNS 30 TESTS OF 1000 SAMPLES EACH TO CHECK"
  9. 80 PRINT "UNIFORMITY OF DISTRIBUTION OF RANDOM NUMBERS. KOMOLGOROV-"
  10. 90 PRINT "SMIRNOV (K-S) STATISTICS (K+ AND K-) ARE GENERATED FOR"
  11. 100 PRINT "EACH TEST. THESE TWO NUMBERS ARE A MEASURE OF THE GREATEST"
  12. 110 PRINT "DEVIATION, IN THE POSITIVE AND NEGATIVE DIRECTION, OF THE"
  13. 120 PRINT "ACCUMULATION OF THE 1000 NUMBERS FROM THE IDEAL DISTRIBUTION"
  14. 130 PRINT "OF F(X)=X, 0<=X<1."
  15. 140 PRINT
  16. 150 PRINT "THESE TWO SETS (K+ AND K-) OF 30 STATISTICS THEMSELVES HAVE"
  17. 160 PRINT "AN EXPECTED DISTRIBUTION OF F(X) = 1 - EXP(-2*X*X). THE"
  18. 170 PRINT "K-S TEST IS RUN AGAIN ON EACH OF THESE TWO SETS, AND IF"
  19. 180 PRINT "THE DEVIATION IS TOO GREAT (TOP OR BOTTOM 1%) FOR ANY ONE "
  20. 190 PRINT "OF THE RESULTING STATISTICS, THEN THE TEST FAILS."
  21. 200 PRINT
  22. 210 PRINT " BEGIN TEST"
  23. 220 PRINT
  24. 230 DIM P(1200),Q(30),R(30)
  25. 240 REM SET #TRIALS PER EXPERIMENT
  26. 250 LET N=1000
  27. 260 REM SET #SLOTS USED IN ARRAY
  28. 270 LET N8=INT(1.1*N)
  29. 280 REM SET #EXPERIMENTS
  30. 290 LET N9=30
  31. 300 PRINT
  32. 310 REM BEGIN TEST LOOP
  33. 320 PRINT "TEST","K+","K-"
  34. 330 FOR L=1 TO N9
  35. 340 REM MARK SLOTS AS EMPTY
  36. 350 FOR I=1 TO N8
  37. 360 LET P(I)=3
  38. 370 NEXT I
  39. 380 REM FILL SLOTS WITH RANDOM VALUES, APPROXIMATELY IN ORDER
  40. 390 FOR I=1 TO N
  41. 400 LET X=RND
  42. 410 LET X1=INT(N8*X)
  43. 411 REM MR. HAM ADDED NEXT 2 LINES TO FIX TEST
  44. 412 IF X1>0 THEN 420
  45. 413 LET X1=X1+1
  46. 420 IF P(X1)<>3 THEN 460
  47. 430 LET P(X1)=X
  48. 440 GOTO 590
  49. 450 REM IF PRIMARY SLOT FILLED, SEARCH FOR NEAREST EMPTY SLOT
  50. 460 FOR J=1 TO N8
  51. 470 IF X1-J<1 THEN 510
  52. 480 IF P(X1-J)<>3 THEN 510
  53. 490 LET P(X1-J)=X
  54. 500 GOTO 590
  55. 510 IF X1+J>N8 THEN 550
  56. 520 IF P(X1+J)<>3 THEN 550
  57. 530 LET P(X1+J)=X
  58. 540 GOTO 590
  59. 550 NEXT J
  60. 560 PRINT "RED ALERT - NO SLOT FOUND",I,X
  61. 570 PRINT "FATAL ERROR IN PROGRAM ALGORITHM"
  62. 580 STOP
  63. 590 NEXT I
  64. 600 REM FIND GROUPS SEPARATED BY EMPTY SLOTS
  65. 605 REM ASSERT ALL ELEMENTS OF ONE GROUP < ALL ELEMENTS OF NEXT GROUP
  66. 607 REM THEREFORE, NEED SORT ONLY WITHIN GROUPS
  67. 610 LET I=1
  68. 620 FOR I8=I TO N8
  69. 630 IF P(I8)<>3 THEN 660
  70. 640 NEXT I8
  71. 650 GOTO 930
  72. 660 FOR I9=I8 TO N8
  73. 670 IF P(I9)=3 THEN 700
  74. 680 NEXT I9
  75. 690 LET I9=N8+1
  76. 700 IF I8>=I9-1 THEN 720
  77. 710 GOSUB 750
  78. 720 LET I=I9
  79. 730 GOTO 620
  80. 740 REM BUBBLE-SORT A GROUP
  81. 750 LET I5=I8
  82. 760 LET I6=I9-2
  83. 770 LET I7=1
  84. 780 LET A3=0
  85. 790 FOR J1=I5 TO I6 STEP I7
  86. 800 IF P(J1)<=P(J1+1) THEN 850
  87. 810 LET A3=9
  88. 820 LET W=P(J1)
  89. 830 LET P(J1)=P(J1+1)
  90. 840 LET P(J1+1)=W
  91. 850 NEXT J1
  92. 860 REM REVERSE DIRECTION OF SCAN
  93. 870 LET W=I5
  94. 880 LET I5=I6
  95. 890 LET I6=W
  96. 900 LET I7=0-I7
  97. 910 IF A3<>0 THEN 780
  98. 920 RETURN
  99. 930 REM GROUPS SORTED, DO COMPRESS
  100. 940 LET S1=0
  101. 950 FOR R1=1 TO N
  102. 960 LET S1=S1+1
  103. 970 IF P(S1)=3 THEN 960
  104. 980 LET P(R1)=P(S1)
  105. 990 NEXT R1
  106. 1000 LET M1=-1E38
  107. 1010 LET M2=-1E38
  108. 1020 REM FIND K+ AND K- ON PRIMARY DATA
  109. 1030 FOR I=1 TO N
  110. 1040 LET N1=(I/N)-P(I)
  111. 1050 LET N2=P(I)-((I-1)/N)
  112. 1060 IF N1<M1 THEN 1080
  113. 1070 LET M1=N1
  114. 1080 IF N2<M2 THEN 1100
  115. 1090 LET M2=N2
  116. 1100 NEXT I
  117. 1110 LET N5=SQR(N)
  118. 1120 LET M1=M1*N5
  119. 1130 LET M2=M2*N5
  120. 1140 LET Q(L)=M1
  121. 1150 LET R(L)=M2
  122. 1160 PRINT L,M1,M2
  123. 1170 NEXT L
  124. 1180 LET F=0
  125. 1190 PRINT
  126. 1200 PRINT "SUMMARY K-S STATISTICS FOR THE K+ VALUES"
  127. 1210 GOSUB 1430
  128. 1220 PRINT
  129. 1230 PRINT "SUMMARY K-S STATISTICS FOR THE K- VALUES"
  130. 1240 REM SET UP Q-ARRAY FOR SUBROUTINE
  131. 1250 FOR L=1 TO N9
  132. 1260 LET Q(L)=R(L)
  133. 1270 NEXT L
  134. 1280 GOSUB 1430
  135. 1290 PRINT
  136. 1300 REM BASED ON 30 TRIALS
  137. 1310 PRINT "ALL RESULTS SHOULD FALL BETWEEN .04354 AND 1.4801"
  138. 1320 PRINT
  139. 1330 IF F=0 THEN 1360
  140. 1340 PRINT "*** TEST FAILED ***"
  141. 1350 GOTO 1370
  142. 1360 PRINT "*** TEST PASSED ***"
  143. 1370 PRINT
  144. 1380 PRINT
  145. 1390 PRINT " END TEST"
  146. 1400 PRINT
  147. 1410 PRINT "END PROGRAM 134"
  148. 1420 STOP
  149. 1430 REM FIND K+ AND K- ON KS-STATS FROM PRIMARY DATA
  150. 1440 FOR I=1 TO N9-1
  151. 1450 FOR J=I+1 TO N9
  152. 1460 IF Q(I)<=Q(J) THEN 1500
  153. 1470 LET W=Q(I)
  154. 1480 LET Q(I)=Q(J)
  155. 1490 LET Q(J)=W
  156. 1500 NEXT J
  157. 1510 NEXT I
  158. 1520 LET M1=-1E38
  159. 1530 LET M2=-1E38
  160. 1550 FOR I=1 TO N9
  161. 1560 LET F1=1-EXP(-2*Q(I)*Q(I))
  162. 1570 LET N1=(I/N9) - F1
  163. 1580 LET N2=F1 - ((I-1)/N9)
  164. 1590 IF N1<M1 THEN 1610
  165. 1600 LET M1=N1
  166. 1610 IF N2<M2 THEN 1630
  167. 1620 LET M2=N2
  168. 1630 NEXT I
  169. 1640 LET N5=SQR(N9)
  170. 1650 LET M1=M1*N5
  171. 1660 LET M2=M2*N5
  172. 1670 PRINT "K+ = ";M1;" K- = ";M2
  173. 1680 PRINT
  174. 1690 REM VALUES BASED ON 30 TRIALS
  175. 1700 IF M1<.04354 THEN 1750
  176. 1710 IF M1>1.4801 THEN 1750
  177. 1720 IF M2<.04354 THEN 1750
  178. 1730 IF M2>1.4801 THEN 1750
  179. 1740 GOTO 1760
  180. 1750 LET F=F+1
  181. 1760 RETURN
  182. 1770 END