Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/03/15 14:00:39 (9 years ago)
Author:
mkommend
Message:

#2259: Merged r11434, r11435, r11441 and r11313, r11348 into stable.

Location:
stable
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Problems.Instances.DataAnalysis

  • stable/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs

    r11170 r11868  
    3131
    3232    /// <summary>
    33     /// Generates a sequence of evenly spaced points between start and end (inclusive!).
     33    /// Generates a sequence of evenly spaced points by returning the start value and adding the stepwidth until the end is reached or surpassed.
     34    ///
    3435    /// </summary>
    3536    /// <param name="start">The smallest and first value of the sequence.</param>
    3637    /// <param name="end">The largest and last value of the sequence.</param>
    3738    /// <param name="stepWidth">The step size between subsequent values.</param>
    38     /// <returns>An sequence of values from start to end (inclusive)</returns>
    39     public static IEnumerable<double> GenerateSteps(double start, double end, double stepWidth) {
    40       if (start > end) throw new ArgumentException("start must be less than or equal end.");
    41       if (stepWidth <= 0) throw new ArgumentException("stepwith must be larger than zero.", "stepWidth");
    42       double x = start;
    43       // x<=end could skip the last value because of numerical problems
    44       while (x < end || x.IsAlmost(end)) {
     39    /// <param name="includeEnd">Determines if the end should be included in the sequence regardless if the end is divisible by the stepwidth.</param>
     40    /// <returns>A sequence of values from start to end (inclusive)</returns>
     41    [Obsolete("It is recommended to use the decimal overload to achieve a higher numerical accuracy.")]
     42    public static IEnumerable<double> GenerateSteps(double start, double end, double stepWidth, bool includeEnd = false) {
     43      //mkommend: IEnumerable.Cast fails due to boxing and unboxing of the involved types
     44      // http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs#27bb217a6d5457ec
     45      // http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx     
     46
     47      return GenerateSteps((decimal)start, (decimal)end, (decimal)stepWidth, includeEnd).Select(x => (double)x);
     48    }
     49
     50    /// <summary>
     51    /// Generates a sequence of evenly spaced points by returning the start value and adding the stepwidth until the end is reached or surpassed.
     52    /// </summary>
     53    /// <param name="start">The smallest and first value of the sequence.</param>
     54    /// <param name="end">The largest and last value of the sequence.</param>
     55    /// <param name="stepWidth">The step size between subsequent values.</param>
     56    /// /// <param name="includeEnd">Determines if the end should be included in the sequence regardless if the end is divisible by the stepwidth.</param>
     57    /// <returns>A sequence of values from start to end</returns>
     58    public static IEnumerable<decimal> GenerateSteps(decimal start, decimal end, decimal stepWidth, bool includeEnd = false) {
     59      if (stepWidth == 0)
     60        throw new ArgumentException("The step width cannot be zero.");
     61      if (start < end && stepWidth < 0)
     62        throw new ArgumentException("The step width must be larger than zero for increasing sequences (start < end).");
     63      if (start > end && stepWidth > 0)
     64        throw new ArgumentException("The step width must be smaller than zero for decreasing sequences (start > end).");
     65
     66      decimal x = start;
     67      while (x <= end) {
    4568        yield return x;
    4669        x += stepWidth;
    4770      }
     71      if (x - stepWidth < end && includeEnd) yield return end;
    4872    }
    4973
Note: See TracChangeset for help on using the changeset viewer.