mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 17:29:33 +02:00
* 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:
parent
d515fed3db
commit
1bcde3436d
@ -434,12 +434,20 @@ end;
|
|||||||
|
|
||||||
function random(l:longint): longint;
|
function random(l:longint): longint;
|
||||||
begin
|
begin
|
||||||
|
{ otherwise we can return values = l (JM) }
|
||||||
|
if (l < 0) then
|
||||||
|
inc(l);
|
||||||
random := longint((int64(cardinal(genrand_MT19937))*l) shr 32);
|
random := longint((int64(cardinal(genrand_MT19937))*l) shr 32);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function random(l:int64): int64;
|
function random(l:int64): int64;
|
||||||
begin
|
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;
|
end;
|
||||||
|
|
||||||
function random: extended;
|
function random: extended;
|
||||||
|
Loading…
Reference in New Issue
Block a user