18 : base(isThreadSafeRandom: true)
33 public override int Next(
int maxValue)
42 public override int Next(
int minValue,
int maxValue)
44 if (minValue > maxValue)
65 public override long NextInt64(
long minValue,
long maxValue)
67 if (minValue > maxValue)
110 public abstract int Next(
int maxValue);
112 public abstract int Next(
int minValue,
int maxValue);
118 public abstract long NextInt64(
long minValue,
long maxValue);
148 public override int Next(
int maxValue)
153 public override int Next(
int minValue,
int maxValue)
155 long num = (long)maxValue - (
long)minValue;
156 if (num >
int.MaxValue)
160 return (
int)(
_prng.
Sample() * (double)num) + minValue;
170 while (num ==
long.MaxValue);
179 public override long NextInt64(
long minValue,
long maxValue)
181 ulong num = (ulong)(maxValue - minValue);
191 return (
long)num3 + minValue;
198 return (uint)
Next(4194304) | ((ulong)(uint)
Next(4194304) << 22) | ((ulong)(uint)
Next(1048576) << 44);
249 public override int Next(
int maxValue)
254 public override int Next(
int minValue,
int maxValue)
256 long num = (long)maxValue - (
long)minValue;
257 if (num >
int.MaxValue)
271 while (num ==
long.MaxValue);
280 public override long NextInt64(
long minValue,
long maxValue)
282 ulong num = (ulong)(maxValue - minValue);
292 return (
long)num3 + minValue;
319 for (
int i = 0; i <
buffer.Length; i++)
336 int[]
array =
new int[56];
337 int num = ((seed ==
int.MinValue) ?
int.MaxValue :
Math.
Abs(seed));
338 int num2 = (
array[55] = 161803398 - num);
341 for (
int i = 1; i < 55; i++)
343 if ((num4 += 21) >= 55)
351 num3 +=
int.MaxValue;
355 for (
int j = 1; j < 5; j++)
357 for (
int k = 1; k < 56; k++)
367 array[k] +=
int.MaxValue;
383 for (
int i = 0; i <
buffer.Length; i++)
402 int num = seedArray[inext] - seedArray[inextp];
403 if (num ==
int.MaxValue)
411 seedArray[inext] = num;
425 num2 += 2147483646.0;
426 return num2 / 4294967293.0;
442 ulong* ptr = stackalloc ulong[4];
468 ulong num = s2 << 17;
489 while (num ==
int.MaxValue);
493 public override int Next(
int maxValue)
503 while (num2 >= (uint)maxValue);
509 public override int Next(
int minValue,
int maxValue)
511 ulong num = (ulong)maxValue - (ulong)minValue;
521 return (
int)num3 + minValue;
533 while (num ==
long.MaxValue);
547 while (num2 >= (ulong)maxValue);
553 public override long NextInt64(
long minValue,
long maxValue)
555 ulong num = (ulong)(maxValue - minValue);
565 return (
long)num3 + minValue;
581 while (
buffer.Length >= 8)
584 ulong num5 = num2 << 17;
596 byte* ptr = (
byte*)(&num6);
597 for (
int i = 0; i <
buffer.Length; i++)
601 ulong num7 = num2 << 17;
617 return (
double)(
NextUInt64() >> 11) * 1.1102230246251565
E-16;
622 return (
float)(
NextUInt64() >> 40) * 5.9604645
E-08f;
646 private protected Random(
bool isThreadSafeRandom)
656 public virtual int Next(
int maxValue)
665 public virtual int Next(
int minValue,
int maxValue)
667 if (minValue > maxValue)
688 public virtual long NextInt64(
long minValue,
long maxValue)
690 if (minValue > maxValue)
static unsafe void GetRandomBytes(byte *buffer, int length)
static double Abs(double value)
static uint RotateLeft(uint value, int offset)
static int Log2Ceiling(uint value)
void NextBytes(byte[] buffer)
void NextBytes(Span< byte > buffer)
int Next(int minValue, int maxValue)
long NextInt64(long minValue, long maxValue)
long NextInt64(long maxValue)
override double NextDouble()
override float NextSingle()
override long NextInt64()
override long NextInt64(long minValue, long maxValue)
override int Next(int minValue, int maxValue)
Net5CompatDerivedImpl(Random parent, int seed)
override void NextBytes(Span< byte > buffer)
override int Next(int maxValue)
override void NextBytes(byte[] buffer)
override long NextInt64(long maxValue)
Net5CompatDerivedImpl(Random parent)
override long NextInt64(long maxValue)
override void NextBytes(byte[] buffer)
override double NextDouble()
Net5CompatSeedImpl(int seed)
override long NextInt64(long minValue, long maxValue)
override void NextBytes(Span< byte > buffer)
override int Next(int minValue, int maxValue)
override float NextSingle()
override int Next(int maxValue)
override long NextInt64()
static XoshiroImpl Create()
static XoshiroImpl t_random
override double NextDouble()
override long NextInt64(long minValue, long maxValue)
override long NextInt64()
static XoshiroImpl LocalRandom
override long NextInt64(long maxValue)
override void NextBytes(Span< byte > buffer)
override float NextSingle()
override void NextBytes(byte[] buffer)
override int Next(int maxValue)
override int Next(int minValue, int maxValue)
override long NextInt64()
override int Next(int maxValue)
unsafe override void NextBytes(Span< byte > buffer)
override long NextInt64(long minValue, long maxValue)
override long NextInt64(long maxValue)
override int Next(int minValue, int maxValue)
override void NextBytes(byte[] buffer)
override double NextDouble()
override float NextSingle()
static void ThrowMinMaxValueSwapped()
Random(bool isThreadSafeRandom)
virtual void NextBytes(Span< byte > buffer)
virtual float NextSingle()
virtual double NextDouble()
virtual void NextBytes(byte[] buffer)
virtual int Next(int minValue, int maxValue)
virtual int Next(int maxValue)
virtual long NextInt64(long maxValue)
virtual long NextInt64(long minValue, long maxValue)
static void ThrowMaxValueMustBeNonNegative()
static string Argument_MinMaxValue
static string Format(string resourceFormat, object p1)
static string ArgumentOutOfRange_NeedNonNegNum
static void ThrowArgumentNullException(string name)
void NextBytes(Span< byte > buffer)
double GetSampleForLargeRange()