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.
 
 
 
 
 
 

115 lines
2.8 KiB

  1. 10 PRINT "PROGRAM FILE 137: POKER TEST FOR RND FUNCTION."
  2. 20 PRINT " ANSI STANDARD 8.4"
  3. 30 PRINT
  4. 40 PRINT "SECTION 137.1: POKER TEST FOR RND FUNCTION."
  5. 50 PRINT
  6. 60 PRINT "THIS PROGRAM CATEGORIZES FIXED-SIZE GROUPS OF RANDOM NUMBERS"
  7. 70 PRINT "BASED ON HOW MANY DIFFERENT TYPES OF NUMBER ARE IN EACH"
  8. 80 PRINT "GROUP. A TYPE IS DETERMINED BY WHICH FRACTION OF THE 0 - 1"
  9. 90 PRINT "SEGMENT THE VALUE OF THE NUMBER FALLS WITHIN. CHI-SQUARE"
  10. 100 PRINT "IS THEN COMPUTED AND DISPLAYED AS THE RESULT TO SEE IF"
  11. 110 PRINT "IT IS COMPATIBLE WITH THE EXPECTED DISTRIBUTION FOR UNIFORM"
  12. 120 PRINT "RANDOM NUMBERS."
  13. 130 PRINT
  14. 140 PRINT "***** THIS TEST IS INFORMATIVE ONLY *****"
  15. 150 PRINT
  16. 160 PRINT " BEGIN TEST"
  17. 170 PRINT
  18. 180 DIM B(20)
  19. 190 REM SET SIZE OF GROUPS
  20. 200 LET K=5
  21. 210 REM SET #TYPES
  22. 220 LET D=7
  23. 230 IF D>=K THEN 260
  24. 240 PRINT "ALGORITHM INVALID FOR D<K. PROGRAM TERMINATING."
  25. 250 GOTO 820
  26. 260 LET N=INT(5*(D^(K-1)))
  27. 270 PRINT "RUNNING ";N;" TRIALS, SO THAT EACH POSSIBILITY HAS"
  28. 280 PRINT "EXPECTED VALUE >= 5, AS NEEDED FOR CHI-SQUARE TEST."
  29. 290 PRINT
  30. 300 FOR I=1 TO K
  31. 310 LET C(I)=0
  32. 320 NEXT I
  33. 330 FOR N1=1 TO N
  34. 340 LET R=0
  35. 350 REM MARK B-ARRAY AS NO TYPE S HIT SO FAR
  36. 360 FOR I=1 TO D
  37. 370 LET B(I)=0
  38. 380 NEXT I
  39. 390 FOR I=1 TO K
  40. 400 LET J=INT(D*RND)+1
  41. 410 IF B(J)=1 THEN 450
  42. 420 REM GOT A NEW TYPE, MARK AND COUNT
  43. 430 LET R=R+1
  44. 440 LET B(J)=1
  45. 450 NEXT I
  46. 460 LET C(R)=C(R)+1
  47. 470 NEXT N1
  48. 480 LET S=0
  49. 490 REM SET TOTAL #POSSIBILITIES
  50. 500 LET D1=D^K
  51. 510 PRINT "#TYPES","ACTUAL COUNT","EXPECTED COUNT"
  52. 520 FOR I=1 TO K
  53. 530 LET F=1
  54. 540 FOR J=(D-I)+1 TO D
  55. 550 LET F=F*J
  56. 560 NEXT J
  57. 570 LET R=I
  58. 580 REM GET STIRLING NUMBER FOR K,R
  59. 590 REM RESULT IN A9
  60. 600 GOSUB 840
  61. 610 REM F=PROB OF I DIFFERENT TYPES
  62. 620 LET F=(F*A9)/D1
  63. 630 PRINT I,C(I),F*N
  64. 640 LET S=S+(C(I)*C(I))/F
  65. 650 NEXT I
  66. 660 LET V=(S/N) - N
  67. 670 REM CHI-SQ FOR 4 D.F.
  68. 680 PRINT
  69. 690 PRINT "FOR FOUR D.F., SHOULD HAVE .710721 <= CHI-SQ <= 9.48773"
  70. 700 PRINT "(5% TAIL AT EACH END.)"
  71. 710 PRINT
  72. 720 PRINT "ACTUAL CHI-SQ = ";V
  73. 730 PRINT
  74. 740 IF V<.710721 THEN 780
  75. 750 IF V>9.48773 THEN 780
  76. 760 PRINT "*** INFORMATIVE TEST PASSED ***"
  77. 770 GOTO 790
  78. 780 PRINT "*** INFORMATIVE TEST FAILED ***"
  79. 790 PRINT
  80. 800 PRINT " END TEST"
  81. 810 PRINT
  82. 820 PRINT "END PROGRAM 137"
  83. 830 STOP
  84. 840 REM GIVEN K,R, WHAT IS STIRLING NUMBER?
  85. 850 REM ANSWER RETURNED IN A9
  86. 860 IF R>K THEN 910
  87. 870 IF R=K THEN 930
  88. 880 IF R=1 THEN 930
  89. 890 IF R=0 THEN 910
  90. 900 GOTO 950
  91. 910 LET A9=0
  92. 920 GOTO 1130
  93. 930 LET A9=1
  94. 940 GOTO 1130
  95. 950 DIM A(20)
  96. 960 REM THIS LIMITS RANGE OF ROUTINE TO R<=20 (K UNCONSTRAINED)
  97. 970 FOR I8=1 TO 20
  98. 980 LET A(I8)=1
  99. 990 NEXT I8
  100. 1000 LET K9=K-R
  101. 1010 FOR K1=3 TO K
  102. 1020 LET M1=R
  103. 1030 IF R<K1-1 THEN 1050
  104. 1040 LET M1=K1-1
  105. 1050 LET M2=2
  106. 1060 IF 2>K1-K9 THEN 1080
  107. 1070 LET M2=K1-K9
  108. 1080 FOR R1=M1 TO M2 STEP -1
  109. 1090 LET A(R1)=R1*A(R1)+A(R1-1)
  110. 1100 NEXT R1
  111. 1110 NEXT K1
  112. 1120 LET A9=A(R)
  113. 1130 RETURN
  114. 1140 END