home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11792 < prev    next >
Encoding:
Internet Message Format  |  1992-07-30  |  2.2 KB

  1. Xref: sparky comp.lang.c:11792 comp.sys.amiga.programmer:11831
  2. Newsgroups: comp.lang.c,comp.sys.amiga.programmer
  3. Path: sparky!uunet!cs.utexas.edu!qt.cs.utexas.edu!yale.edu!yale!mintaka.lcs.mit.edu!bloom-picayune.mit.edu!adam.mit.edu!scs
  4. From: scs@adam.mit.edu (Steve Summit)
  5. Subject: Re: Matt Dillon's DICE (Amiga C) and rand() function
  6. Message-ID: <1992Jul30.214117.27748@athena.mit.edu>
  7. Sender: news@athena.mit.edu (News system)
  8. Nntp-Posting-Host: adam.mit.edu
  9. Organization: none, at the moment
  10. References: <1992Jul29.081247.1@gallua> <1992Jul29.163704.26489@proxxi.se>
  11. Date: Thu, 30 Jul 1992 20:09:46 GMT
  12. Lines: 44
  13.  
  14. [This is a lightly edited version of an article I posted a few
  15. minutes ago; readers with especially nimble fingers may have seen
  16. the previous one before I canceled it.]
  17.  
  18. In article <1992Jul29.163704.26489@proxxi.se>, elias@proxxi.se (Elias M}rtensson (proxxi)) writes:
  19. > CADS_COLE@GALLUA.BITNET (Kevin Cole; Washington DC) writes:
  20. >> According to Matt Dillon's DICE documents, I can limit the range of values
  21. >> returned by rand() if I define the variable RAND_MAX to something other than
  22. >> the default.
  23. >
  24. > I have never used DICE but it looks like RAND_MAX is an extern int.
  25. > Try this instead:
  26. > extern int RAND_MAX;
  27. >     RAND_MAX = 1023;
  28.  
  29. No.  Kevin Cole was (literally!) on drugs when he wrote the above
  30. about "defin[ing] the variable RAND_MAX to something other than
  31. the default."  RAND_MAX is a macro, provided by the system (in
  32. <stdlib.h>, on ANSI systems) which tells you the range of values
  33. which rand() *will* give you.  It is not possible to reprogram
  34. rand()'s range on-the-fly, nor meaningful to redefine RAND_MAX.
  35.  
  36. To get integral random numbers with a different range, the
  37. modulus operator is typically used:
  38.  
  39.     rand() % n
  40.  
  41. gives random numbers in the range 1..n-1 .  (Note that this
  42. technique is slightly inaccurate, and works well only if RAND_MAX
  43. is much greater than, or an exact multiple of, n).
  44.  
  45. One legitimate use of RAND_MAX is generating random floating-
  46. point numbers; for example,
  47.  
  48.     rand() / (double)(RAND_MAX - 1)
  49.  
  50. should give randomly distributed numbers over the range 0..1 .
  51. (This method, too, is potentially imperfect; it will have
  52. problems if RAND_MAX is not exactly representable as a double
  53. value).
  54.  
  55.                     Steve Summit
  56.                     scs@adam.mit.edu
  57.