Esempio n. 1
0
        private static uint Adjust(IUniformRandomBitGenerator generator, uint upperBoundary)
        {
            if (generator == null)
            {
                throw new ArgumentNullException(nameof(generator));
            }
            if (upperBoundary == 0)
            {
                return(0);
            }
            if (upperBoundary == uint.MaxValue)
            {
                return(generator.Next32Bits());
            }

            ++upperBoundary;
            var   numBuckets = ulong.MaxValue / upperBoundary;
            var   limit      = numBuckets * upperBoundary;
            ulong sample;

            do
            {
                sample = generator.Next64Bits();
            }while (sample >= limit);
            return((uint)(sample / numBuckets));
        }
Esempio n. 2
0
 public static int Next(IUniformRandomBitGenerator generator, int lowerBound, int upperBound)
 => (int)Adjust(generator, (uint)(upperBound - lowerBound)) + lowerBound;
Esempio n. 3
0
        public static double Next(IUniformRandomBitGenerator generator)
        {
            var entropy = mMask | (generator.Next64Bits() >> 12);

            return(BitConverter.Int64BitsToDouble((long)entropy) - 1.0);
        }
Esempio n. 4
0
 public int NextInt(IUniformRandomBitGenerator generator)
 => (int)Adjust(Generator, Delta) + LowerBound;
Esempio n. 5
0
 public double NextDouble(IUniformRandomBitGenerator generator)
 => Next(generator);