Skip to content

Commit 491e576

Browse files
author
埃博拉酱
committed
Fix infinitive loop in RandomExtensions.NextBigIntegerSequence(0,1)
1 parent e7bcab1 commit 491e576

2 files changed

Lines changed: 5 additions & 1 deletion

File tree

src/Numerics.Tests/Random/RandomExtensionTests.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
using NUnit.Framework;
3232
using System.Numerics;
3333
using System.Collections.Generic;
34+
using System.Linq;
3435

3536
namespace MathNet.Numerics.UnitTests.Random
3637
{
@@ -57,13 +58,16 @@ public void CanSampleInt64()
5758
public void CanSampleBigInteger()
5859
{
5960
var rnd = new System.Random(0);
61+
//Main case
6062
IEnumerator<BigInteger> Sequence = rnd.NextBigIntegerSequence((BigInteger)long.MinValue * 3, (BigInteger)long.MaxValue * 3).GetEnumerator();
6163
Sequence.MoveNext();
6264
System.Console.WriteLine(Sequence.Current);
6365
Sequence.MoveNext();
6466
System.Console.WriteLine(Sequence.Current);
6567
Sequence.MoveNext();
6668
System.Console.WriteLine(Sequence.Current);
69+
//Boundary conditions
70+
System.Console.WriteLine(rnd.NextBigIntegerSequence(0, 1).First());
6771
}
6872

6973
/// <summary>

src/Numerics/Random/RandomExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ static IEnumerable<int> NextInt32SequenceEnumerable(System.Random rnd, int minIn
203203
public static IEnumerable<BigInteger> NextBigIntegerSequence(this System.Random rnd, BigInteger minInclusive, BigInteger maxExclusive)
204204
{
205205
BigInteger AbsoluteRange = maxExclusive - minInclusive;
206-
int NumBytes = (int)Math.Ceiling(BigInteger.Log(AbsoluteRange, byte.MaxValue) * 2);
206+
int NumBytes = (int)Math.Ceiling(BigInteger.Log(AbsoluteRange, byte.MaxValue) * 2) + 1;
207207
byte[] ByteSequence = Enumerable.Repeat(byte.MaxValue, NumBytes + 1).ToArray();
208208
ByteSequence[NumBytes] = 0;
209209
BigInteger RandomNumber = new BigInteger(ByteSequence);

0 commit comments

Comments
 (0)