Index: /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.cs	(revision 12292)
+++ /trunk/sources/HeuristicLab.MainForm.WindowsForms/3.3/Dialogs/DefineArithmeticProgressionDialog.cs	(revision 12293)
@@ -23,5 +23,4 @@
 using System.ComponentModel;
 using System.Globalization;
-using System.Linq;
 using System.Windows.Forms;
 using HeuristicLab.Common;
@@ -31,10 +30,10 @@
     private bool allowOnlyInteger;
 
-    public double Minimum { get; private set; }
-    public double Maximum { get; private set; }
-    public double Step { get; private set; }
+    public decimal Minimum { get; private set; }
+    public decimal Maximum { get; private set; }
+    public decimal Step { get; private set; }
 
-    public IEnumerable<double> Values {
-      get { return EnumerateProgression().Reverse(); }
+    public IEnumerable<decimal> Values {
+      get { return SequenceGenerator.GenerateSteps(Minimum, Maximum, Step, includeEnd: true); }
     }
 
@@ -48,5 +47,5 @@
       this.allowOnlyInteger = allowOnlyInteger;
     }
-    public DefineArithmeticProgressionDialog(bool allowOnlyInteger, double minimum, double maximum, double step)
+    public DefineArithmeticProgressionDialog(bool allowOnlyInteger, decimal minimum, decimal maximum, decimal step)
       : this(allowOnlyInteger) {
       Minimum = minimum;
@@ -63,5 +62,5 @@
     private void textBox_Validating(object sender, CancelEventArgs e) {
       var textBox = (TextBox)sender;
-      double value = 0;
+      decimal value = 0;
       if (allowOnlyInteger) {
         int intValue;
@@ -75,5 +74,5 @@
         }
       } else {
-        if (!double.TryParse(textBox.Text, NumberStyles.Float, CultureInfo.CurrentCulture.NumberFormat, out value)) {
+        if (!decimal.TryParse(textBox.Text, NumberStyles.Float, CultureInfo.CurrentCulture.NumberFormat, out value)) {
           errorProvider.SetError(textBox, "Please enter a valid double value.");
           e.Cancel = true;
@@ -90,27 +89,4 @@
       return Minimum <= Maximum && Step >= 0;
     }
-
-    private IEnumerable<double> EnumerateProgression() {
-      double value = Maximum;
-      bool minimumIncluded = false;
-      int i = 1;
-      while (value >= Minimum) {
-        if (value.IsAlmost(Minimum)) {
-          yield return Minimum;
-          minimumIncluded = true;
-        } else yield return value;
-
-        if (Step == 0) break; // a step size of 0 will only output maximum and minimum
-        if (allowOnlyInteger) {
-          value = (int)Maximum - i * (int)Step;
-        } else {
-          value = Maximum - i * Step;
-        }
-        i++;
-      }
-      if (!minimumIncluded) {
-        yield return Minimum;
-      }
-    }
   }
 }
Index: /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs
===================================================================
--- /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 12292)
+++ /trunk/sources/HeuristicLab.Optimizer/3.3/CreateExperimentDialog.cs	(revision 12293)
@@ -264,5 +264,5 @@
       var parameter = (IValueParameter)generateButton.Tag;
       bool integerOnly = intParameters.ContainsKey(parameter);
-      double min = 0, max = 1, step = 1;
+      decimal min = 0, max = 1, step = 1;
       #region Try to calculate some meaningful values
       if (integerOnly) {
@@ -276,7 +276,7 @@
         int len = doubleParameters[parameter].Length;
         if (len > 0) {
-          min = doubleParameters[parameter].Min();
-          max = doubleParameters[parameter].Max();
-          step = len >= 2 ? Math.Abs((doubleParameters[parameter][len - 1] - doubleParameters[parameter][len - 2])) : 1;
+          min = (decimal)doubleParameters[parameter].Min();
+          max = (decimal)doubleParameters[parameter].Max();
+          step = len >= 2 ? Math.Abs(((decimal)doubleParameters[parameter][len - 1] - (decimal)doubleParameters[parameter][len - 2])) : 1m;
         }
       }
@@ -292,5 +292,5 @@
           } else {
             doubleParameters[parameter].Reset -= new EventHandler(ValuesArray_Reset);
-            doubleParameters[parameter] = new DoubleArray(values.ToArray());
+            doubleParameters[parameter] = new DoubleArray(values.Select(x => (double)x).ToArray());
             doubleParameters[parameter].Reset += new EventHandler(ValuesArray_Reset);
             stringConvertibleArrayView.Content = doubleParameters[parameter];
