demo2
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
#nullable enable
|
||||
|
||||
namespace Demo2.Domain
|
||||
{
|
||||
public struct DeterministicRandom
|
||||
{
|
||||
private ulong _state;
|
||||
private ulong _increment;
|
||||
|
||||
public DeterministicRandom(ulong seed, ulong stream = 54)
|
||||
{
|
||||
_state = 0;
|
||||
_increment = (stream << 1) | 1;
|
||||
NextUInt();
|
||||
_state += seed;
|
||||
NextUInt();
|
||||
}
|
||||
|
||||
public uint NextUInt()
|
||||
{
|
||||
var oldState = _state;
|
||||
_state = unchecked(oldState * 6364136223846793005UL + _increment);
|
||||
var xorShifted = (uint)(((oldState >> 18) ^ oldState) >> 27);
|
||||
var rotation = (int)(oldState >> 59);
|
||||
return (xorShifted >> rotation) | (xorShifted << ((-rotation) & 31));
|
||||
}
|
||||
|
||||
public int NextInt(int minInclusive, int maxExclusive)
|
||||
{
|
||||
if (maxExclusive <= minInclusive) return minInclusive;
|
||||
return minInclusive + (int)(NextUInt() % (uint)(maxExclusive - minInclusive));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user