Pseudo-random Number Generator: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
Heres a Pseudo-random Number Generator - I just made it up off the top of my head - so it has no mathematical research behind it to prove it's random... I've tested it for a while and it looks random to me, about the same as llFrand(). But what ever. Sue me. | Heres a Pseudo-random Number Generator - I just made it up off the top of my head - so it has no mathematical research behind it to prove it's random... I've tested it for a while and it looks random to me, about the same as llFrand(). The main reason that I use it so that I can test scripts, and then when it blows up because of a math error or something I can just run the script again an it will use the same numbers, in the same order. It can also be used for two (or more) scripts to talk on a more-or-less channel. But what ever. Sue me. | ||
I | I use this for determining a random channel for two (or more) objects to talk on. This allows the scripts to talk without users being able to intercept the messages - and even if they do - then the channel will change in a minute or two - so no harm done. | ||
I recently compared this with llFrand() and it is on average 5% faster. | |||
<pre> | <pre> | ||
// IMPORTANT: Change the following number before using! | |||
integer seed = 0x61FA687C; | integer seed = 0x61FA687C; | ||
Revision as of 06:39, 2 October 2007
Heres a Pseudo-random Number Generator - I just made it up off the top of my head - so it has no mathematical research behind it to prove it's random... I've tested it for a while and it looks random to me, about the same as llFrand(). The main reason that I use it so that I can test scripts, and then when it blows up because of a math error or something I can just run the script again an it will use the same numbers, in the same order. It can also be used for two (or more) scripts to talk on a more-or-less channel. But what ever. Sue me.
I use this for determining a random channel for two (or more) objects to talk on. This allows the scripts to talk without users being able to intercept the messages - and even if they do - then the channel will change in a minute or two - so no harm done.
I recently compared this with llFrand() and it is on average 5% faster.
// IMPORTANT: Change the following number before using!
integer seed = 0x61FA687C;
integer rand() {
seed = (integer)(seed * 0x71B5F252 + 0xD);
return seed ^ 0x7FFFFFFF;
}
Example code to test the randomness (Is that a word?) of the generator.
default {
state_entry() {
integer i = 0;
integer min = 0x7FFFFFFF;
integer max = -0x7FFFFFFF;
integer total = 0;
while (i < 100000000) {
integer r = rand();
if (r < min) {
min = r;
}
if (r > max) {
max = r;
}
total += r;
i++;
}
llOwnerSay("Min: " + (string)min);
llOwnerSay("Max: " + (string)max);
llOwnerSay("Average: " + (string)(total/100000000));
}
}