// 50% overlap between phases public Hysteresis(double range, int phaseCount) { ArgAssert.GreaterThan(range, "range", 0); ArgAssert.AtLeast(phaseCount, "phaseCount", 2); var downwardsThresholds = new double[phaseCount]; var upwardsThresholds = new double[phaseCount]; var step = range / (phaseCount + 1); downwardsThresholds[0] = 0; downwardsThresholds[1] = step; for (var i = 2; i < phaseCount; i++) { downwardsThresholds[i] = i * step; upwardsThresholds[i - 2] = downwardsThresholds[i]; } upwardsThresholds[phaseCount - 2] = phaseCount * step; upwardsThresholds[phaseCount - 1] = range; _downwardsThresholds = downwardsThresholds; _upwardsThresholds = upwardsThresholds; _equilibria = ComputeEquilibria(); }
private void ValidateThresholds() { ArgAssert.AtLeast(_downwardsThresholds.Count, "thresholds.Count", 2); ArgAssert.Equal(_downwardsThresholds.Count, "downwardsThreholds.Count", _upwardsThresholds.Count, "upwardsTresholds.Count"); for (var i = 1; i < PhaseCount; i++) { ArgAssert.GreaterThan (_upwardsThresholds[i - 1], string.Format("_upwardsThresholds[{0}]", i - 1), _downwardsThresholds[i], string.Format("_downwardsThresholds[{0}]", i)); ArgAssert.GreaterThan (_upwardsThresholds[i], string.Format("_upwardsThresholds[{0}]", i), _upwardsThresholds[i - 1], string.Format("_upwardsThresholds[{0}]", i - 1)); ArgAssert.GreaterThan (_downwardsThresholds[i], string.Format("_downwardsThresholds[{0}]", i), _downwardsThresholds[i - 1], string.Format("_downwardsThresholds[{0}]", i - 1)); } }
public static string Repeat(this string @this, int times) { ArgAssert.NotNull(@this, "this"); ArgAssert.AtLeast(times, "times", 0); if (@this == "" || times == 0) { return(""); } if (times == 1) { return(@this); } var result = new StringBuilder(@this.Length * times); for (var i = 0; i < times; i++) { result.Append(@this); } return(result.ToString()); }