Of course 64 and 32 bit are the sizes, not the platform! That may not be

clear.

The implementation is _*not *_undefined for negative values,_unless

you say that you define it as undefined_.

Because you seem to have implemented it or most of it.

It renders a mathematical comparable distribution in the negative to

the positive values.

In both Turbo Pascal as in Delphi and because they use a different

algorithm and made an implementation error as well, the negative

values are indeed not defined. But that's because of the algorithm and

because of the implementation by Borland (yes, it stems from Borland

times).

The Mersenne Twister we use is also valid for negative values and if

you want I can send you the mathematical proof.

I already made the LCG in Delphi compatible mode available on the wiki

and that implementation differs in so far as that it corrects the

"undefined for negative values" for that algorithm too. It is 100%

compatible for the Delphi documented range, btw.

I am busy evaluating important Random implementions for different

languages, so an FPC library is available for data that is generated

in a different language and relies on a particular PRNG.

Also note that the output of the current random is strictly valid for

32 bit only.

In my code I already added a 64 bit version.

Regards,

Thaddy

*Post by Jonas Maebe**Post by Martin Schreiber*Is this intended? If not, which one is correct?

random(x) is undefined for negative parameters. It should have had an

unsigned parameter, like in Turbo Pascal (where it is word). Delphi

defines it as always returning a positive value, but I don't know

what happens if you pass a negative parameter there.

Jonas

_______________________________________________

http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel