public double GetRandom() { int block = SafeRandom.NextInt(0, numberOfBlocks - 1); if (block == 0) { return(TailFallback()); } double xRand = SafeRandom.NextDouble(); double yRand = SafeRandom.NextDouble(); int flip = SafeRandom.NextInt(0, 2); double xVal = xRand * x[block]; if (xVal < x[block + 1]) { if (flip == 1) { xVal = -xVal; } return(xVal); } double yVal = y[block] + (yRand * (y[block + 1] - y[block])); if (yVal < pFunc(xVal)) { if (flip == 1) { xVal = -xVal; } return(xVal); } return(GetRandom()); }
public double TailFallback() { double xRand = SafeRandom.NextDouble(); double yRand = SafeRandom.NextDouble(); double xVal = -Math.Log(xRand) / x[0]; double yVal = -Math.Log(yRand); int flip = SafeRandom.NextInt(0, 2); if ((2 * yVal) > Math.Pow(xVal, 2)) { if (flip == 1) { xVal = -xVal - x[0]; } else { xVal += x[0]; } return(xVal); } return(TailFallback()); }
public Parameter(string name, int minValue, int maxValue) : this(name, minValue, maxValue, SafeRandom.NextInt(minValue, maxValue + 1)) // Assign random initial value. { }
public Parameter(string Name, int MinValue, int MaxValue) : this(Name, MinValue, MaxValue, SafeRandom.NextInt(MinValue, MaxValue + 1)) // Assign random initial value. { }