/// <summary> /// Returns random double according to specified settings. /// </summary> /// <param name="rand"></param> /// <param name="settings">Encapsulated settings</param> public static double NextDouble(this Random rand, RandomValueSettings settings) { double value; switch (settings.DistrType) { case DistributionType.Uniform: value = rand.NextRangedUniformDouble(settings.Min, settings.Max); break; case DistributionType.Gaussian: if (settings.DistrCfg != null) { RandomValueSettings.GaussianDistrSettings gaussianCfg = settings.DistrCfg as RandomValueSettings.GaussianDistrSettings; value = rand.NextFilterredGaussianDouble(gaussianCfg.Mean, gaussianCfg.StdDev, settings.Min, settings.Max); } else { throw new Exception($"Configuration of Gaussian distribution is missing"); } break; case DistributionType.Exponential: if (settings.DistrCfg != null) { RandomValueSettings.ExponentialDistrSettings exponentialCfg = settings.DistrCfg as RandomValueSettings.ExponentialDistrSettings; value = rand.NextFilterredExponentialDouble(exponentialCfg.Mean, settings.Min, settings.Max); } else { throw new Exception($"Configuration of Exponential distribution is missing"); } break; case DistributionType.Gamma: if (settings.DistrCfg != null) { RandomValueSettings.GammaDistrSettings gammaCfg = settings.DistrCfg as RandomValueSettings.GammaDistrSettings; value = rand.NextFilterredGammaDouble(gammaCfg.Alpha, gammaCfg.Beta, settings.Min, settings.Max); } else { throw new Exception($"Configuration of Gamma distribution is missing"); } break; default: throw new Exception($"Unknown distribution type {settings.DistrType}."); } if (settings.RandomSign) { value *= rand.NextSign(); } return(value); }
/// <summary> /// Returns random double following the Exponential distribution. /// </summary> /// <param name="rand"></param> /// <param name="distrParams">Exponential distribution parameters</param> public static double NextExponentialDouble(this Random rand, RandomValueSettings.ExponentialDistrSettings distrParams) { return(NextExponentialDouble(rand, distrParams.Mean)); }