public static FRandom Next(FRandom previous, int minValue, int maxValue)
 {
     return(new FRandom(NextRanged(previous, minValue, maxValue), NewU(previous.U), NewV(previous.V)));
 }
 private static int NextRanged(FRandom previous, int minValue, int maxValue)
 {
     return((int)(minValue + Next(previous.U, previous.V) * (maxValue - minValue)));
 }
 /// <summary>
 /// Used for generating a sequence from a single known seed.
 /// Skip(0,...) is the same as Next, but Skip(1,...) is the same
 /// as calling Next twice but having to pass the result of the first
 /// one into the second.
 /// </summary>
 /// <param name="skip">Number of random numbers in sequence to skip</param>
 /// <param name="previous"></param>
 /// <param name="minValue"></param>
 /// <param name="maxValue"></param>
 /// <returns></returns>
 public static FRandom Skip(int skip, FRandom previous, int minValue, int maxValue)
 {
     return(skip <= 0 ?
            Next(previous, minValue, maxValue)
             : Skip(skip - 1, Next(previous, minValue, maxValue), minValue, maxValue));
 }