Truly random?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Alvin

    Truly random?

    Well, I'm developing a Tetris game in SDL, but when it comes to
    deciding the next block, I'm stuck. It's random, but when I try
    something like seeding the randomizer with the time, it won't update as
    fast as one block can fall, and the next to be determined. Generating
    different numbers in one spur can work, but people can play Tetris for
    hours (or even days), and so you can't predict how long. You could
    constantly be making more with the same system as making, say 5 random
    numbers out of a seed, but that would prove system intensive if the
    game already uses a lot of memory (not that Tetris does, but I'm sure
    there's a better way).

  • Dag-Erling Smørgrav

    #2
    Re: Truly random?

    "Alvin" <alvin.sipraga@ gmail.com> writes:[color=blue]
    > Well, I'm developing a Tetris game in SDL, but when it comes to
    > deciding the next block, I'm stuck. It's random, but when I try
    > something like seeding the randomizer with the time, it won't update as
    > fast as one block can fall, and the next to be determined.[/color]

    You only need to seed the PRNG once, at the start of the game.

    DES
    --
    Dag-Erling Smørgrav - des@des.no

    Comment

    • Randy Howard

      #3
      Re: Truly random?

      Alvin wrote
      (in article
      <1133884774.799 489.117310@f14g 2000cwb.googleg roups.com>):
      [color=blue]
      > Well, I'm developing a Tetris game in SDL, but when it comes to
      > deciding the next block, I'm stuck. It's random, but when I try
      > something like seeding the randomizer with the time, it won't update as
      > fast as one block can fall, and the next to be determined.[/color]

      It sounds like you are trying to seed on every random call. You
      only need to seed it once, or perhaps once per game worst case,
      not every time. That would slow things down quite a bit, and
      not achieve much at all.



      --
      Randy Howard (2reply remove FOOBAR)
      "The power of accurate observation is called cynicism by those
      who have not got it." - George Bernard Shaw





      Comment

      • Gordon Burditt

        #4
        Re: Truly random?

        If, as your subject line suggests, you want truly random numbers,
        forget a PRNG like rand() or random(). The PR part stands for
        PSEUDO-RANDOM. Computers aren't very good at generating truly
        random numbers unless they are broken or they have specific hardware
        for the purpose. Some attempts at truly random number generation
        time keystrokes, or listen to thermal noise or radioactive decay,
        or time events from outside the computer (like network traffic).

        If you need truly random numbers for cryptography, a PRNG won't
        do. The difference can get you killed.
        [color=blue]
        >Well, I'm developing a Tetris game in SDL, but when it comes to
        >deciding the next block, I'm stuck. It's random, but when I try
        >something like seeding the randomizer with the time, it won't update as
        >fast as one block can fall, and the next to be determined. Generating[/color]

        Don't seed the PSEUDO random number generator more than once. Since
        the time() call gives a time granularity of seconds on most (POSIX)
        systems, and presumably blocks update faster than that, you'll get
        sucky non-random numbers.
        [color=blue]
        >different numbers in one spur can work, but people can play Tetris for
        >hours (or even days), and so you can't predict how long. You could
        >constantly be making more with the same system as making, say 5 random
        >numbers out of a seed, but that would prove system intensive if the
        >game already uses a lot of memory (not that Tetris does, but I'm sure
        >there's a better way).[/color]

        Seed once. Period. If calling rand() or random() alone slows down
        the display too much, perhaps you need a faster CPU. But I doubt it.
        All the graphics probably takes a lot more work than just generating
        a pseudo-random number.

        Gordon L. Burditt

        Comment

        • Alvin

          #5
          Re: Truly random?

          Well, it works like a charm for large numbers, but for small numbers
          (say, 0 to 7), it often repeats them 3 or so times before changing. I
          guess I could determine on how big the number is, so if it's > 100 and
          < 200, select an right sided L block or something. Thanks very much,
          though.

          Comment

          • Mogens Heller Jensen

            #6
            Re: Truly random?


            "Alvin" <alvin.sipraga@ gmail.com> wrote in message
            news:1133884774 .799489.117310@ f14g2000cwb.goo glegroups.com.. .[color=blue]
            > Well, I'm developing a Tetris game in SDL, but when it comes to
            > deciding the next block, I'm stuck. It's random, but when I try
            > something like seeding the randomizer with the time, it won't update as
            > fast as one block can fall, and the next to be determined. Generating
            > different numbers in one spur can work, but people can play Tetris for
            > hours (or even days), and so you can't predict how long. You could
            > constantly be making more with the same system as making, say 5 random
            > numbers out of a seed, but that would prove system intensive if the
            > game already uses a lot of memory (not that Tetris does, but I'm sure
            > there's a better way).
            >[/color]

            The ideal solution (which, however, requires an internet connection) is to
            connect to www.random.org and download some random bytes...

            They are truly random, since they come from *sampling backgound noise in the
            atmosphere* (how cool is that?!).

            This would also be a cool selling argument!

            </funmaking>
            <serious>
            Check Randy Howard's answer :o)

            -Mogens


            Comment

            • Randy Howard

              #7
              Re: Truly random?

              Gordon Burditt wrote
              (in article <11pbgkunf7spd7 8@corp.supernew s.com>):
              [color=blue]
              > If, as your subject line suggests, you want truly random numbers,
              > forget a PRNG like rand() or random(). The PR part stands for
              > PSEUDO-RANDOM. Computers aren't very good at generating truly
              > random numbers unless they are broken or they have specific hardware
              > for the purpose. Some attempts at truly random number generation
              > time keystrokes, or listen to thermal noise or radioactive decay,
              > or time events from outside the computer (like network traffic).
              >
              > If you need truly random numbers for cryptography, a PRNG won't
              > do. The difference can get you killed.[/color]

              He said he's writing a Tetris game. I find it highly unlikely
              he needs crypto random numbers for that.

              --
              Randy Howard (2reply remove FOOBAR)
              "The power of accurate observation is called cynicism by those
              who have not got it." - George Bernard Shaw





              Comment

              • Randy Howard

                #8
                Re: Truly random?

                Alvin wrote
                (in article
                <1133888616.701 661.86770@g49g2 000cwa.googlegr oups.com>):
                [color=blue]
                > Well, it works like a charm for large numbers, but for small numbers
                > (say, 0 to 7), it often repeats them 3 or so times before changing.[/color]

                Random does not mean "no repeats", especially in such a narrow
                range. People often think that the output from a random number
                generator should be evenly disributed. Bzzt.

                If you are still reseeding it over and over, that will skew your
                results. Fix that first.

                If you think the random implementation on your platform is
                flawed (after seeding it properly), then check out the Mersenne
                Twister PRNG. It's probably overkill for a video game, but it
                might make you feel better anyway.



                --
                Randy Howard (2reply remove FOOBAR)
                "The power of accurate observation is called cynicism by those
                who have not got it." - George Bernard Shaw





                Comment

                • Gordon Burditt

                  #9
                  Re: Truly random?

                  >> If, as your subject line suggests, you want truly random numbers,[color=blue][color=green]
                  >> forget a PRNG like rand() or random(). The PR part stands for
                  >> PSEUDO-RANDOM. Computers aren't very good at generating truly
                  >> random numbers unless they are broken or they have specific hardware
                  >> for the purpose. Some attempts at truly random number generation
                  >> time keystrokes, or listen to thermal noise or radioactive decay,
                  >> or time events from outside the computer (like network traffic).
                  >>
                  >> If you need truly random numbers for cryptography, a PRNG won't
                  >> do. The difference can get you killed.[/color]
                  >
                  >He said he's writing a Tetris game. I find it highly unlikely
                  >he needs crypto random numbers for that.[/color]

                  True, but he asked for truly random numbers. Perhaps he's betting
                  large amounts on the outcome (anyone for Tetris machines next to
                  the video poker machines and the slots?), enough to make organized
                  efforts to cheat worth the time and trouble. If you're building
                  gambling machines which will take bets of real money, you *DO* need
                  crypto-quality random numbers or you're going to go broke.

                  Gordon L. Burditt

                  Comment

                  • Randy Howard

                    #10
                    Re: Truly random?

                    Gordon Burditt wrote
                    (in article <11pbk2mb3oopp1 e@corp.supernew s.com>):
                    [color=blue][color=green]
                    >> He said he's writing a Tetris game. I find it highly unlikely
                    >> he needs crypto random numbers for that.[/color]
                    >
                    > True, but he asked for truly random numbers. Perhaps he's betting[/color]

                    I'd rather bet on the outcome of the Rose Bowl...
                    [color=blue]
                    > large amounts on the outcome (anyone for Tetris machines next to
                    > the video poker machines and the slots?), enough to make organized
                    > efforts to cheat worth the time and trouble.[/color]

                    Ok, but I don't see a market for "Tetris Gambling". Maybe there
                    is, prove me wrong. :-)


                    --
                    Randy Howard (2reply remove FOOBAR)
                    "The power of accurate observation is called cynicism by those
                    who have not got it." - George Bernard Shaw





                    Comment

                    • Walter Roberson

                      #11
                      Re: Truly random?

                      In article <11pbk2mb3oopp1 e@corp.supernew s.com>,
                      Gordon Burditt <gordonb.8lsbe@ burditt.org> wrote:[color=blue]
                      >True, but he asked for truly random numbers. Perhaps he's betting
                      >large amounts on the outcome (anyone for Tetris machines next to
                      >the video poker machines and the slots?), enough to make organized
                      >efforts to cheat worth the time and trouble. If you're building
                      >gambling machines which will take bets of real money, you *DO* need
                      >crypto-quality random numbers or you're going to go broke.[/color]

                      [OT]

                      My recollection is somewhat vague, as I just skimmed the material
                      some time ago, but if I recall what I have read correctly, the
                      professional casinos in places like Los Vegas do -not- use
                      crypto-quality random numbers, at least for some kinds of machines
                      such as slot machines. I seem to recall reading that they use a PRNG
                      but with algorithm parameters modified by a central computer.

                      The PNRG use has partly to do with managable auditing -- recording each
                      individual truly random number would take too much storage. The
                      ability to modify the parameters is used to adjust the payout rate
                      based upon the payin rate -- essentially once the intake has reached a
                      trigger value, the central computer adjusts the payout probabilities
                      upwards to make it more likely that someone will win a large prize. For
                      one thing, a slot machine that shows exactly the same losing line of
                      symbol 100 times in a row might be truly random, but it won't be
                      -perceived- to be random...

                      PNRG are losing propositions in gambling to the extent that someone
                      can effectively analyze the past history to predict the future outcomes.
                      A simple linear congruence PNRG is very risky in that respect, but
                      there are PRNG with large internal states, and if those states are
                      reseeded at intervals shorter than would be needed to extract useful
                      state information, then PRNG can become practical.
                      --
                      "It is important to remember that when it comes to law, computers
                      never make copies, only human beings make copies. Computers are given
                      commands, not permission. Only people can be given permission."
                      -- Brad Templeton

                      Comment

                      • Kenny McCormack

                        #12
                        Re: Truly random?

                        In article <1133888616.701 661.86770@g49g2 000cwa.googlegr oups.com>,
                        Alvin <alvin.sipraga@ gmail.com> wrote:[color=blue]
                        >Well, it works like a charm for large numbers, but for small numbers
                        >(say, 0 to 7), it often repeats them 3 or so times before changing. I
                        >guess I could determine on how big the number is, so if it's > 100 and
                        >< 200, select an right sided L block or something. Thanks very much,
                        >though.[/color]

                        (Obviously, what follows is off-topic, not portable, and blah, blah, blah,
                        but anyway...)

                        Long ago and far away, using a compiler/development environment that need
                        not be mentioned here, I discovered that the higher order bits seemed to
                        be more random than the lower ordered ones. So, that the usual method (get
                        the number between, say, 0 and 32767, then divide it by the top of your
                        range, to get a random number between 0 and your range) tended to give less
                        good random results. So, I would take the result of random and bit shift
                        it left 5 (<< 5) to get the lower ordered bits more random. Seems to work.

                        Comment

                        • mensanator@aol.com

                          #13
                          Re: Truly random?


                          Kenny McCormack wrote:[color=blue]
                          > In article <1133888616.701 661.86770@g49g2 000cwa.googlegr oups.com>,
                          > Alvin <alvin.sipraga@ gmail.com> wrote:[color=green]
                          > >Well, it works like a charm for large numbers, but for small numbers
                          > >(say, 0 to 7), it often repeats them 3 or so times before changing. I
                          > >guess I could determine on how big the number is, so if it's > 100 and
                          > >< 200, select an right sided L block or something. Thanks very much,
                          > >though.[/color]
                          >
                          > (Obviously, what follows is off-topic, not portable, and blah, blah, blah,
                          > but anyway...)
                          >
                          > Long ago and far away, using a compiler/development environment that need
                          > not be mentioned here, I discovered that the higher order bits seemed to
                          > be more random than the lower ordered ones. So, that the usual method (get
                          > the number between, say, 0 and 32767, then divide it by the top of your
                          > range, to get a random number between 0 and your range) tended to give less
                          > good random results. So, I would take the result of random and bit shift
                          > it left 5 (<< 5) to get the lower ordered bits more random. Seems to work.[/color]

                          Gee, I got a new asshole reamed for suggesting that very thing
                          a couple months ago despite it being in the FAQ.

                          Better sit on your helmet.

                          Comment

                          • Michael Mair

                            #14
                            Re: Truly random?

                            Kenny McCormack wrote:[color=blue]
                            > In article <1133888616.701 661.86770@g49g2 000cwa.googlegr oups.com>,
                            > Alvin <alvin.sipraga@ gmail.com> wrote:
                            >[color=green]
                            >>Well, it works like a charm for large numbers, but for small numbers
                            >>(say, 0 to 7), it often repeats them 3 or so times before changing. I
                            >>guess I could determine on how big the number is, so if it's > 100 and
                            >>< 200, select an right sided L block or something. Thanks very much,
                            >>though.[/color]
                            >
                            >
                            > (Obviously, what follows is off-topic, not portable, and blah, blah, blah,
                            > but anyway...)
                            >
                            > Long ago and far away, using a compiler/development environment that need
                            > not be mentioned here, I discovered that the higher order bits seemed to
                            > be more random than the lower ordered ones. So, that the usual method (get
                            > the number between, say, 0 and 32767, then divide it by the top of your[/color]

                            You probably are talking about talking the remainder modulo the top
                            of the range. "Divide" was the other thingy, the one which worked
                            better than plain modulo.
                            [color=blue]
                            > range, to get a random number between 0 and your range) tended to give less
                            > good random results. So, I would take the result of random and bit shift
                            > it left 5 (<< 5) to get the lower ordered bits more random. Seems to work.[/color]

                            You probably mean the other left. The one most people call "right".
                            rand() << 5 certainly will give you five quite unrandom lower bits.

                            -Michael
                            --
                            E-Mail: Mine is an /at/ gmx /dot/ de address.

                            Comment

                            • Jordan Abel

                              #15
                              Re: Truly random?

                              On 2005-12-06, Kenny McCormack <gazelle@yin.in teraccess.com> wrote:[color=blue]
                              > In article <1133888616.701 661.86770@g49g2 000cwa.googlegr oups.com>,
                              > Alvin <alvin.sipraga@ gmail.com> wrote:[color=green]
                              >>Well, it works like a charm for large numbers, but for small numbers
                              >>(say, 0 to 7), it often repeats them 3 or so times before changing. I
                              >>guess I could determine on how big the number is, so if it's > 100 and
                              >>< 200, select an right sided L block or something. Thanks very much,
                              >>though.[/color]
                              >
                              > (Obviously, what follows is off-topic, not portable, and blah, blah, blah,
                              > but anyway...)
                              >
                              > Long ago and far away, using a compiler/development environment that
                              > need not be mentioned here, I discovered that the higher order bits
                              > seemed to be more random than the lower ordered ones. So, that the
                              > usual method (get the number between, say, 0 and 32767, then divide it
                              > by the top of your range, to get a random number between 0 and your
                              > range) tended to give less good random results. So, I would take the
                              > result of random and bit shift it left 5 (<< 5) to get the lower
                              > ordered bits more random. Seems to work.[/color]

                              I assume you mean to the right.

                              And it is marginally on-topic, because the code of a PRNG with IIRC
                              characteristics like those you describe appears in the text of the C
                              standard.

                              Comment

                              Working...