20 IEnumerable<double> adjacentUnitCosts,
21 IEnumerable<double> holdingCosts,
24 ArgumentNullException.ThrowIfNull(adjacentUnitCosts);
25 ArgumentNullException.ThrowIfNull(holdingCosts);
27 double[] p = adjacentUnitCosts.ToArray();
28 double[] h = holdingCosts.ToArray();
30 if (h.Length == 0 || p.Length != h.Length + 1)
32 throw new ArgumentException(
33 "Non-speculative analysis requires at least one holding " +
34 "interval and exactly one more unit-cost value than holding " +
38 ValidateFinite(p, nameof(adjacentUnitCosts));
39 ValidateFinite(h, nameof(holdingCosts));
51 double effectiveTolerance =
57 bool satisfied =
true;
59 for (
int index = 0; index < h.Length; index++)
66 if (margins[index] < -effectiveTolerance)