Skip to content

Commit 922a8ed

Browse files
authored
Merge pull request #10 from pmcgee69/main
Fix Overflow and Range errors
2 parents 43ec337 + 6f5064b commit 922a8ed

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

Source/Velthuis.RandomNumbers.pas

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,25 @@ constructor TRandom.Create(Seed: Int64);
103103

104104
function TRandom.Next(Bits: Integer): UInt32;
105105
begin
106-
{$IFOPT Q+}
106+
{$IFOPT R+}
107107
{$DEFINE HasRangeChecks}
108108
{$ENDIF}
109-
FSeed := (FSeed * CMultiplier + CIncrement);
110-
Result := UInt32(FSeed shr (64 - Bits)); // Use the highest bits; Lower bits have lower period.
109+
{$IFOPT Q+}
110+
{$DEFINE HasOverflowChecks}
111+
{$ENDIF}
112+
113+
{$RANGECHECKS OFF}
114+
{$OVERFLOWCHECKS OFF}
115+
116+
FSeed := Int64(FSeed * CMultiplier + CIncrement);
117+
Result:= UInt32(FSeed shr (64 - Bits)); // Use the highest bits; Lower bits have lower period.
118+
111119
{$IFDEF HasRangeChecks}
112120
{$RANGECHECKS ON}
113121
{$ENDIF}
122+
{$IFDEF HasOverflowChecks}
123+
{$OVERFLOWCHECKS ON}
124+
{$ENDIF}
114125
end;
115126

116127
function TRandom.GetSeed: Int64;
@@ -161,7 +172,8 @@ constructor TRandomBase.Create;
161172
procedure TRandomBase.NextBytes(var Bytes: array of Byte);
162173
var
163174
Head, Tail: Integer;
164-
N, Rnd, I: Integer;
175+
N, I: Integer;
176+
Rnd: UInt32;
165177
begin
166178
Head := Length(Bytes) div SizeOf(Int32);
167179
Tail := Length(Bytes) mod SizeOf(Int32);

0 commit comments

Comments
 (0)