Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/ConvexHullMeasures.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/ConvexHullMeasures.cs	(revision 10286)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/ConvexHullMeasures.cs	(revision 10287)
@@ -248,5 +248,12 @@
     public static double CalculateHypercubeVolume(double[] bounds, int dim) {
       //this is not very smart...
-      return CalculateVolume(GenerateHyperCube(bounds, dim));
+      //return CalculateVolume(GenerateHyperCube(bounds, dim));
+      double diff = bounds[1] - bounds[0];
+
+      double volume = diff;
+      for (int i = 0; i < dim; i++) {
+        volume *= diff;
+      }
+      return volume;
     }
 
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/FractionClass.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/FractionClass.cs	(revision 10286)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/FractionClass.cs	(revision 10287)
@@ -249,4 +249,26 @@
     }
 
+    public double ToDouble(int digits) {
+      if (this.m_Denominator == 1)
+        return (double)this.m_Numerator;
+      else if (this.m_Denominator == 0) {
+        switch (NormalizeIndeterminate(this.m_Numerator)) {
+          case Indeterminates.NegativeInfinity:
+            return double.NegativeInfinity;
+
+          case Indeterminates.PositiveInfinity:
+            return double.PositiveInfinity;
+
+          case Indeterminates.NaN:
+          default:    // this can't happen
+            return double.NaN;
+        }
+      } else {
+        ReduceFraction(ref this);
+        int factor = (int)Math.Pow(10, digits);
+        return ((double)((this.m_Numerator * factor) / this.m_Denominator)) / factor;
+      }
+    }
+
     /// <summary>
     /// Get the value of the Fraction as a string, with proper representation for NaNs and infinites
Index: branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/RunCollectionModifiers/RealVectorConvexHullModifier.cs
===================================================================
--- branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/RunCollectionModifiers/RealVectorConvexHullModifier.cs	(revision 10286)
+++ branches/HeuristicLab.Analysis.AlgorithmBehavior/HeuristicLab.Analysis.AlgorithmBehavior.Analyzers/3.3/RunCollectionModifiers/RealVectorConvexHullModifier.cs	(revision 10287)
@@ -32,4 +32,5 @@
 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
 using HeuristicLab.Problems.TestFunctions;
+using Mehroz;
 
 namespace HeuristicLab.Analysis.AlgorithmBehavior.Analyzers {
@@ -93,5 +94,10 @@
         var boundsMatrix = run.Parameters["Bounds"] as DoubleMatrix;
         var bounds = new double[] { boundsMatrix[0, 0], boundsMatrix[0, 1] };
-        double hyperCubeVolume = ConvexHullMeasures.CalculateHypercubeVolume(bounds, BestSolutionParameter.Value.Length);
+        Fraction hyperCubeVolumeBig = ConvexHullMeasures.CalculateHypercubeVolumeBig(bounds, BestSolutionParameter.Value.Length);
+        double hyperCubeVolume = double.NaN;
+
+        if (hyperCubeVolumeBig < 10000000) {
+          hyperCubeVolume = ConvexHullMeasures.CalculateHypercubeVolume(bounds, BestSolutionParameter.Value.Length);
+        }
 
         List<double[]> completeHull = null;
@@ -118,8 +124,15 @@
 
           if (completeHull != null && completeHull.Any() && completeHull.First().Length < completeHull.Count) {
-            double completeHullVolume = ConvexHullMeasures.CalculateVolume(completeHull);
-            double ratio = completeHullVolume / hyperCubeVolume;
-            dtIncrementalHullVolume.Values.Add(completeHullVolume);
-            dtIncrementalHullVolumeRatio.Values.Add(ratio);
+            if (double.IsNaN(hyperCubeVolume)) {
+              Fraction completeHullVolume = ConvexHullMeasures.CalculateVolumeBig(completeHull);
+              Fraction ratio = completeHullVolume / hyperCubeVolumeBig;
+              dtIncrementalHullVolume.Values.Add(completeHullVolume.ToDouble());
+              dtIncrementalHullVolumeRatio.Values.Add(ratio.ToDouble());
+            } else {
+              double completeHullVolume = ConvexHullMeasures.CalculateVolume(completeHull);
+              double ratio = completeHullVolume / hyperCubeVolume;
+              dtIncrementalHullVolume.Values.Add(completeHullVolume);
+              dtIncrementalHullVolumeRatio.Values.Add(ratio);
+            }
           }
 
@@ -128,6 +141,12 @@
 
         if (completeHull != null && completeHull.Any() && completeHull.First().Length < completeHull.Count) {
-          overallVolume.Value = ConvexHullMeasures.CalculateVolume(completeHull);
-          overallVolumeRatio.Value = overallVolume.Value / hyperCubeVolume;
+          if (!double.IsNaN(hyperCubeVolume)) {
+            overallVolume.Value = ConvexHullMeasures.CalculateVolume(completeHull);
+            overallVolumeRatio.Value = overallVolume.Value / hyperCubeVolume;
+          } else {
+            Fraction v = ConvexHullMeasures.CalculateVolumeBig(completeHull);
+            overallVolume.Value = v.ToDouble();
+            overallVolumeRatio.Value = (double)(v / hyperCubeVolumeBig);
+          }
         } else {
           overallVolume.Value = double.NaN;
