Seedable PRNG
Revision as of 20:13, 2 October 2007 by Ppaatt Lynagh (talk | contribs) (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)
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
See also: llFrand, llListRandomize, Pseudo-random_Number_Generator
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"); } }