[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Wesnoth-wiki-changes] PseudoRandomNumberGeneration
From: |
wiki |
Subject: |
[Wesnoth-wiki-changes] PseudoRandomNumberGeneration |
Date: |
Mon, 15 Nov 2004 09:23 +0100 |
UserAgent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041109
Firefox/1.0
IP: 168.209.98.67
URI: http://wesnoth.slack.it/?PseudoRandomNumberGeneration
- - - - -
Index: PseudoRandomNumberGeneration
===================================================================
RCS file: /home/wesnoth/cvsroot/wikiroot/PseudoRandomNumberGeneration,v
retrieving revision 1.11
diff -u -r1.11 PseudoRandomNumberGeneration
--- PseudoRandomNumberGeneration 15 Nov 2004 02:06:37 -0000 1.11
+++ PseudoRandomNumberGeneration 15 Nov 2004 08:23:06 -0000
@@ -1,10 +1,11 @@
- Elvish Pillager: I have finished my work on the Pseudorandom Number
Generation! It's done! I found a lot of bugs on the
-way...
+ Elvish Pillager: I have finished my work on the Pseudorandom Number
Generation! It's done!
+ I found a lot of bugs on the way...
I think I'll wait until the site is back up to go in depth.
- Also, I noticed that a Grand Knight with Holy Water led by a Grand Marshal
during the day can kill a Skeletal Dragon in
-one hit, something that Túrin
- might want to do something about. (It's easy to slaughter the Skeletal Dragon
without being attacked by the other undead.)
+ Also, I noticed that a Grand Knight with Holy Water led by a Grand Marshal
+ during the day can kill a Skeletal Dragon in one hit, something that Túrin
+ might want to do something about. (It's easy to slaughter the Skeletal Dragon
+ without being attacked by the other undead.)
.
Shadowfury333: What exactly is this for?
.
@@ -137,44 +138,44 @@
I got my pseudorandom number generation (to be referred to as PRNG) formula
from a book by Knuth. It is as follows:
Xn+1=(aXn + c) mod m
- That was difficult to do in code. I don't have multiplication[1] OR modulus
in my arsenal, so I had to imitate them
-using while loops.
- Then, I had to choose good values for a, c, and m. Since the 'random'
sequence always loops eventually, the duration of
-the loop is called the period.
+ That was difficult to do in code. I don't have multiplication[1] OR modulus
in my arsenal, so I had to
+ imitate them using while loops.
+ Then, I had to choose good values for a, c, and m. Since the 'random'
sequence always loops eventually,
+ the duration of the loop is called the period.
In order to have a period of length m, the maximum, the numbers had to fill
several conditions.
- That wasn't hard, but the numbers were at first way too small. I increased
them. They did not fulfill my worries that
-the the process would be too slow,
- fortunately, though it's much MUCH slower than doing these operations in a
standalone C application or whatever.
-Something like that could go
+ That wasn't hard, but the numbers were at first way too small. I increased
them.
+ They did not fulfill my worries that the process would be too slow,
+ fortunately, though it's much MUCH slower than doing these operations
+ in a standalone C application or whatever. Something like that could go
through all 32768 possible values in less than a second.
- Anyway, I at first made the mistake of extracting values by regenerating the
randomseed until it was below the
-requested value. (that was incredibly
- stupid. It means that there are only so many possible values, thus it wrecks
the randomseed.) After that I used modulus
-extraction, which is still not
- the best, but at least it works.
- At one point, I ran across a strange problem: Generating pairs of values, I
kept getting the same pairs! There was
-something wrong with my PRNG. It
- turns out that each number easily predicts the next number, until it hits the
modulus. Therefore, I increased a and c
-so that it hit the modulus almost
+ Anyway, I at first made the mistake of extracting values by regenerating the
randomseed
+ until it was below the requested value. (that was incredibly
+ stupid. It means that there are only so many possible values,
+ thus it wrecks the randomseed.) After that I used modulus extraction,
+ which is still not the best, but at least it works.
+ At one point, I ran across a strange problem: Generating pairs of values,
+ I kept getting the same pairs! There was something wrong with my PRNG. It
+ turns out that each number easily predicts the next number, until it hits
+ the modulus. Therefore, I increased a and c so that it hit the modulus almost
every time, while still conforming to the required conditions.
- Another problem was more frustrating but easier to solve once I found it: The
values kept incrementing steadily instead
-of being random! I spent a
- long time puzzling over this before I realized that changing the multiplier
wasn't having any effect. I investigated,
-and found a missing $.
- The last problem I encountered was a bug in Wesnoth. That bug is that
variables remain in existence and retain their
-values between multiplayer
+ Another problem was more frustrating but easier to solve once I found it:
+ The values kept incrementing steadily instead of being random! I spent a
+ long time puzzling over this before I realized that changing the multiplier
+ wasn't having any effect. I investigated, and found a missing $.
+ The last problem I encountered was a bug in Wesnoth. That bug is that
+ variables remain in existence and retain their values between multiplayer
games. I circumvented this by clearing all my variables at the start of the
game.
- Throughout most of this, I had a bugtester on the multiplayer server called
Jammet. I thank you, Jammet, for your
-patience while I fixed
+ Throughout most of this, I had a bugtester on the multiplayer server called
+ Jammet. I thank you, Jammet, for your patience while I fixed
incomprehensible bug after incomprehensible bug. Your help was very helpful.
- [1] there is also a bug in multiplication; apperently floating-point
multiplication and subsequently casting floats to
-ints throws off their values on
- some operating systems.
+ [1] there is also a bug in multiplication; apparently floating-point
+ multiplication and subsequently casting floats to ints throws off their
+ values on some operating systems.
.
- Joshbosh321: can you post that multiplayer map that you were using to, I
assume, playtest this RNG? I played against
- you once and found the concept very interesting...
+ Joshbosh321: can you post that multiplayer map that you were using to, I
assume,
+ playtest this RNG? I played against you once and found the concept very
interesting...
.
||See Also||
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, (continued)
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/13
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/13
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/13
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/14
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/14
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/14
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/14
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/14
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/14
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/14
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration,
wiki <=
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/15
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/15
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/16
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/16
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/16
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/16
- [Wesnoth-wiki-changes] PseudoRandomNumberGeneration, wiki, 2004/11/16