random number generator

Discussion in 'C++' started by asdf, Oct 21, 2006.

  1. asdf

    asdf Guest

    I want a random number generator, the random number should be subject a
    uniform distribution in [0,1]. Could you please give me some hints?
    Thanks.
     
    asdf, Oct 21, 2006
    #1
    1. Advertising

  2. asdf

    Daniel T. Guest

    "asdf" <> wrote:

    > I want a random number generator, the random number should be subject a
    > uniform distribution in [0,1]. Could you please give me some hints?
    > Thanks.


    http://members.cox.net/srice1/random/crandom.html

    --
    There are two things that simply cannot be doubted, logic and perception.
    Doubt those, and you no longer have anyone to discuss your doubts with,
    nor any ability to discuss them.
     
    Daniel T., Oct 21, 2006
    #2
    1. Advertising

  3. Peter Jansson, Oct 21, 2006
    #3
  4. asdf

    Pete Becker Guest

    asdf wrote:
    > I want a random number generator, the random number should be subject a
    > uniform distribution in [0,1]. Could you please give me some hints?
    > Thanks.
    >


    If you've got a copy of TR1, there are random number generators galore
    in it. Dinkumware implements all of the TR. Boost has, among other
    pieces, the random number generators (although I haven't checked to see
    if they're up to date with the changes made for TR1).

    --

    -- Pete

    Author of "The Standard C++ Library Extensions: a Tutorial and
    Reference." For more information about this book, see
    www.petebecker.com/tr1book.
     
    Pete Becker, Oct 22, 2006
    #4
  5. asdf

    noone Guest

    On Sat, 21 Oct 2006 07:53:59 -0700, asdf wrote:

    > I want a random number generator, the random number should be subject a
    > uniform distribution in [0,1]. Could you please give me some hints?
    > Thanks.


    Are you sure you want (1) included in your range?

    Others have given you pointers to RNG literature. One thing I've noticed
    that seems to be an almost universal misuse of random number functions
    such as the srand() and rand() functions is that programmers who
    use them to generate numbers [0..1) virtually NEVER check to see if the
    returned value of rand()==RAND_MAX. While the probability of this
    happening is 1/RAND_MAX, you should check because rand()/RAND_MAX could
    end up outside of your intended range.


    For simple non-cryptographic uniform distributions the rand() function is
    often adequate but for more stringent requirements the BOOST library
    provides several RNGs. Of course as with many open source projects, the
    documentation is lacking...at least it was when I last used them.
     
    noone, Oct 23, 2006
    #5
  6. asdf

    Steve Pope Guest

    noone <> wrote:

    > One thing I've noticed that seems to be an almost universal
    > misuse of random number functions such as the srand() and rand()
    > functions is that programmers who use them to generate numbers
    > [0..1) virtually NEVER check to see if the returned value of
    > rand()==RAND_MAX. While the probability of this happening is
    > 1/RAND_MAX, you should check because rand()/RAND_MAX could end
    > up outside of your intended range.


    I usually do something like

    int x = rand() & 0x3fffffff;
    double y = (double) x / (double) 0x40000000;

    y is now uniform in [0,1).

    A test for RAND_MAX >= 0x3fffffff would be nice as you say.
    On my system RAND_MAX is pow(2,31)-1 which is what you'd expect,
    so it works.

    Steve
     
    Steve Pope, Oct 23, 2006
    #6
  7. asdf

    Pete Becker Guest

    noone wrote:
    > On Sat, 21 Oct 2006 07:53:59 -0700, asdf wrote:
    >
    >> I want a random number generator, the random number should be subject a
    >> uniform distribution in [0,1]. Could you please give me some hints?
    >> Thanks.

    >
    > Are you sure you want (1) included in your range?
    >
    > Others have given you pointers to RNG literature. One thing I've noticed
    > that seems to be an almost universal misuse of random number functions
    > such as the srand() and rand() functions is that programmers who
    > use them to generate numbers [0..1) virtually NEVER check to see if the
    > returned value of rand()==RAND_MAX. While the probability of this
    > happening is 1/RAND_MAX, you should check because rand()/RAND_MAX could
    > end up outside of your intended range.
    >


    Better yet, don't check, but map the range so that this isn't a problem:

    rand() / ((double)RAND_MAX + 1)

    >
    > For simple non-cryptographic uniform distributions the rand() function is
    > often adequate but for more stringent requirements the BOOST library
    > provides several RNGs. Of course as with many open source projects, the
    > documentation is lacking...at least it was when I last used them.
    >
    >


    There's documentation for the TR1 random number generators in chapter 13
    of my book, "The Standard C++ Library Extensions." The Boost generators
    are close to what's in TR1.

    --

    -- Pete

    Author of "The Standard C++ Library Extensions: a Tutorial and
    Reference." For more information about this book, see
    www.petebecker.com/tr1book.
     
    Pete Becker, Oct 23, 2006
    #7
  8. asdf

    Martin Steen Guest

    asdf wrote:
    > I want a random number generator, the random number should be subject a
    > uniform distribution in [0,1]. Could you please give me some hints?
    > Thanks.
    >


    double r = (double) rand() / RAND_MAX;

    http://www.cplusplus.com/ref/cstdlib/rand.html

    -Martin
     
    Martin Steen, Oct 23, 2006
    #8
  9. asdf

    Pete Becker Guest

    Pete Becker wrote:
    > noone wrote:
    >> On Sat, 21 Oct 2006 07:53:59 -0700, asdf wrote:
    >>
    >>> I want a random number generator, the random number should be subject a
    >>> uniform distribution in [0,1]. Could you please give me some hints?
    >>> Thanks.

    >>
    >> Are you sure you want (1) included in your range?
    >>
    >> Others have given you pointers to RNG literature. One thing I've noticed
    >> that seems to be an almost universal misuse of random number functions
    >> such as the srand() and rand() functions is that programmers who
    >> use them to generate numbers [0..1) virtually NEVER check to see if the
    >> returned value of rand()==RAND_MAX. While the probability of this
    >> happening is 1/RAND_MAX, you should check because rand()/RAND_MAX could
    >> end up outside of your intended range.
    >>

    >
    > Better yet, don't check, but map the range so that this isn't a problem:
    >
    > rand() / ((double)RAND_MAX + 1)
    >


    Just a clarification (since I confused myself): this gives a uniform
    distribution over the half-open range [0.0, 1.0), as the message from
    "noone" suggests. It does not answer the original question of how to get
    a uniform distribution over the closed range [0.0, 1.0].

    --

    -- Pete

    Author of "The Standard C++ Library Extensions: a Tutorial and
    Reference." For more information about this book, see
    www.petebecker.com/tr1book.
     
    Pete Becker, Oct 23, 2006
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Kingsley Oteng

    Random Number Generator??

    Kingsley Oteng, Apr 27, 2004, in forum: VHDL
    Replies:
    11
    Views:
    52,269
    rahul.iyer
    Aug 9, 2010
  2. tshad

    Random number/letter generator

    tshad, May 5, 2005, in forum: ASP .Net
    Replies:
    3
    Views:
    9,567
    tshad
    May 6, 2005
  3. Wally
    Replies:
    1
    Views:
    2,793
    pvdg42
    Mar 20, 2006
  4. globalrev
    Replies:
    4
    Views:
    775
    Gabriel Genellina
    Apr 20, 2008
  5. VK
    Replies:
    15
    Views:
    1,184
    Dr J R Stockton
    May 2, 2010
Loading...

Share This Page