* random(int64(0)) now return 0 instead of division by zero

* random(negative_longint) now returns values between -l+1 and 0
    instead of between -l and 0

git-svn-id: trunk@2422 -
This commit is contained in:
Jonas Maebe 2006-02-03 20:57:32 +00:00
parent d515fed3db
commit 1bcde3436d

View File

@ -434,12 +434,20 @@ end;
function random(l:longint): longint;
begin
{ otherwise we can return values = l (JM) }
if (l < 0) then
inc(l);
random := longint((int64(cardinal(genrand_MT19937))*l) shr 32);
end;
function random(l:int64): int64;
begin
random := int64((qword(cardinal(genrand_MT19937)) or ((qword(cardinal(genrand_MT19937)) shl 32))) and $7fffffffffffffff) mod l;
{ always call random, so the random generator cycles (TP-compatible) (JM) }
random := int64((qword(cardinal(genrand_MT19937)) or ((qword(cardinal(genrand_MT19937)) shl 32))) and $7fffffffffffffff);
if (l<>0) then
random := random mod l
else
random := 0;
end;
function random: extended;