home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / UTILITYS / RANDOM.ARC / BASIC.LST next >
File List  |  1990-07-21  |  2KB  |  68 lines

  1.  
  2.  
  3. STANDALONE MS BASIC VERSION OF LISTING 1
  4.  
  5.  
  6. 10 PRINT "whbasic - 840930"
  7. 20 PRINT "basic version of Wichmann Hill generator"
  8. 30 REM J C Nash
  9. 40 REM x, y and z must be seeded as per article
  10. 50 PRINT "provide 3 integers as seeds to the generator"
  11. 60 PRINT "seed x=";
  12. 70 INPUT X
  13. 80 REM adjuust to be in range [0, 30269]
  14. 90 IF X = 0 THEN 120
  15. 100 LET X=X+30269
  16. 110 GOTO 90
  17. 120 IF X=30269 THEN 160
  18. 130 LET X=INT (X-30269)
  19. 140 GOTO 120
  20. 150 REM note use of int to ensure integer seed
  21. 160 PRINT "seed y=";
  22. 170 INPUT Y
  23. 180 REM adjust to be in range [0, 30307]
  24. 190 IF Y = 0 THEN 220
  25. 200 LET Y = Y+30307
  26. 210 GOTO 190
  27. 220 IF Y=30307 THEN 260
  28. 230 LET Y = INT (Y-30307)
  29. 240 GOTO 220
  30. 250 REM note use of int to ensure integer seed
  31. 260 PRINT "seed z=";
  32. 270 REM ADJUST TO BE IN RANGE  [O, 30323]
  33. 280 IF Z = 0 THEN 310
  34. 290 LET Z=Z+30323
  35. 300 IF Z=30323 THEN 350
  36. 320 LET Z=INT (Z-30323)
  37. 330 GOTO 310
  38. 340 REM  note use of int to ensure integer seed
  39. 350 INPUT Z
  40. 360 PRINT
  41. 370 PRINT "how many numbers are to be generated";
  42. 380 INPUT N
  43. 390 FOR I = 1 TO N
  44. 400 GOSUB 1000
  45. 410 PRINT
  46. 420 PRINT "current values -- x=";X;" y=";Y;" x=";Z
  47. 430 PRINT "   random fraction =";R
  48. 440 NEXT I
  49. 450 STOP
  50. 1000 REM comput next member of pseudo-random sequence
  51. 1010 LET X1=INT(X/177)
  52. 1020 LET X2=X-177*X1
  53. 1030 LET X=171*X2-2*X1
  54. 1040 IF X < 0 THEN LET X=X+30269
  55. 1050 LET Y1=INT (Y/176)
  56. 1060 LET Y2=Y-176*Y1
  57. 1070 LET Y=172*Y2-35*Y1
  58. 1080 IF Y < 0 THEN LET Y =Y+30307
  59. 1090 LET Z1=INT(Z/178)
  60. 1100 LET Z2=Z-178*Z1
  61. 1110 LET Z=170*Z2-63*Z1
  62. 1120 IF Z < 0 THEN LET Z=Z+30323
  63. 1130 REM combine generators to give function
  64. 1140 LET T=X/30269+Y/30307+Z/30323
  65. 1150 LET R=T-INT(T)
  66. 1160 REM get fractional part of t only
  67. 1170 RETURN
  68.