2
0
Эх сурвалжийг харах

Merged revisions 2422 via svnmerge from
svn+ssh://[email protected]/FPC/svn/fpc/trunk

r2422 (jonas)
* 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: branches/fixes_2_0@2424 -

Jonas Maebe 19 жил өмнө
parent
commit
55592958c3
1 өөрчлөгдсөн 9 нэмэгдсэн , 1 устгасан
  1. 9 1
      rtl/inc/system.inc

+ 9 - 1
rtl/inc/system.inc

@@ -426,12 +426,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;