Difference between revisions of "Seedable PRNG"
Jump to navigation
Jump to search
m (break the line before the trailing } to make this plainly compilable at a glance -- and copy in the example default.state_entry from the other P R N G while we're at it) |
m (<lsl> tag to <source>) |
||
(2 intermediate revisions by 2 users not shown) | |||
Line 2: | Line 2: | ||
See also: [[llFrand]], [[llListRandomize]], [[Pseudo-random_Number_Generator]] | See also: [[llFrand]], [[llListRandomize]], [[Pseudo-random_Number_Generator]] | ||
Note: The [[32bit_Hash]] example presents just the conversion to integer from llMD5String. | |||
== md5 based seedable PRNG == | == md5 based seedable PRNG == | ||
It's not the fastest thing but it doesn't seem to have much if any output skew, and I couldn't detect any periodicity in the first 100,000 cycles. | It's not the fastest thing but it doesn't seem to have much if any output skew, and I couldn't detect any periodicity in the first 100,000 cycles. | ||
< | <source lang="lsl2"> | ||
//new md5 based seedable PRNG | //new md5 based seedable PRNG | ||
Line 54: | Line 56: | ||
} | } | ||
} | } | ||
</ | </source> | ||
[[Category: LSL Examples]] | [[Category: LSL Examples]] [[Category: LSL Encryption]] |
Latest revision as of 16:54, 24 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
See also: llFrand, llListRandomize, Pseudo-random_Number_Generator
Note: The 32bit_Hash example presents just the conversion to integer from llMD5String.
md5 based seedable PRNG
It's not the fastest thing but it doesn't seem to have much if any output skew, and I couldn't detect any periodicity in the first 100,000 cycles.
//new md5 based seedable PRNG
//By: Gigs Taggart
//Released under BSD License.
//http://www.opensource.org/licenses/bsd-license.php
integer gSeed=0;
string gLastHash;
prng_seed(integer seed)
{
gSeed=seed;
}
integer prng_get()
{
gLastHash=llMD5String(gLastHash, gSeed);
//the bitwise thingy gets rid of negative numbers
return (integer)("0x" + llGetSubString(gLastHash, 0, 7)) & 0x7FFFFFFF;
}
default
{
state_entry()
{
prng_seed(2007031901);
string line;
integer index;
line = "";
for (index = 0; index < 9; ++index)
{
line += " " + (string) prng_get();
}
llOwnerSay(line);
line = "";
for (index = 0; index < 30; ++index)
{
line += " " + (string) (1 + (prng_get() % 6));
}
llOwnerSay(line);
llOwnerSay("OK");
}
}