Forum > Other
Is there a faster random function?
BuffaloX:
Is there a faster random for Lazarus/fpc than the default random function.
I only need 32bit integers.
I just did some fast pixel stuff, and I was quite impressed with the performance of TLazIntfImage used with GetDataLineStart.
I got about 50 MPixels/sec ( 2 Ghz Athlon 64 ) 8)
Unfortunately when I wanted to "animate" the pixels with a random colour, performance dropped to 250.000 pix/sec.
This means by rough estimate that random eats about 95% of the processing power! :shock:
I could do a huge array of random numbers, but that seems a bit lame. :oops:
Vincent Snijders:
Using a linear congruential random number generator would probably faster, but those generators are statistically weaker. But maybe that doesn't matter in your case.
BuffaloX:
It only needs to appear random.
Statistic weakness, missing values, repetition doesn't matter as much as speed.
I've been up all night trying to find something, but I've had no luck.
I thought I could find something meant for games or audio-noise or something where speed is essential.
But I've had no luck so far.
Vincent Snijders:
Inspired by the code from the FASTA benchmark, I give this function for generating a random number between 0..138867.
--- Code: ---
function genRandom: integer;
const
seed : integer = 42;
IM = 139968;
IA = 3877;
IC = 29573;
begin
seed := (seed * IA + IC) mod IM;
result := seed;
end;
--- End code ---
BuffaloX:
WOW cool 8)
I didn't know I could make a const, use it ch it and call the function again and reuse the const with the new value.
That's extremely helpful.
The function is very fast, i now get 24 Mpixels/sec
Unfortuinately it creates a clearly wavy pattern, but I think I can fix that. :D
Navigation
[0] Message Index
[#] Next page