Changeset 17562 for branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/Implementation
- Timestamp:
- 05/27/20 07:34:25 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2971_named_intervals/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Interval/Interval.cs
r17549 r17562 78 78 } 79 79 80 81 82 80 public override string ToString() { 83 81 return "Interval: [" + LowerBound + ", " + UpperBound + "]"; … … 228 226 } 229 227 230 public static Interval Power(Interval a, Interval b) {231 if (a.Contains(0.0) && b.LowerBound < 0) return new Interval(double.NaN, double.NaN);232 233 int bLower = (int)Math.Round(b.LowerBound);234 int bUpper = (int)Math.Round(b.UpperBound);235 236 List<double> powerValues = new List<double>();237 powerValues.Add(Math.Pow(a.UpperBound, bUpper));238 powerValues.Add(Math.Pow(a.UpperBound, bUpper - 1));239 powerValues.Add(Math.Pow(a.UpperBound, bLower));240 powerValues.Add(Math.Pow(a.UpperBound, bLower + 1));241 242 powerValues.Add(Math.Pow(a.LowerBound, bUpper));243 powerValues.Add(Math.Pow(a.LowerBound, bUpper - 1));244 powerValues.Add(Math.Pow(a.LowerBound, bLower));245 powerValues.Add(Math.Pow(a.LowerBound, bLower + 1));246 247 return new Interval(powerValues.Min(), powerValues.Max());248 }249 250 228 public static Interval Square(Interval a) { 251 229 if (a.UpperBound <= 0) return new Interval(a.UpperBound * a.UpperBound, a.LowerBound * a.LowerBound); // interval is negative … … 258 236 } 259 237 260 public static Interval Root(Interval a, Interval b) { 261 int lower = (int)Math.Round(b.LowerBound); 262 int higher = (int)Math.Round(b.UpperBound); 263 264 //Root root(0,0) = 0 265 if (a.LowerBound == 0 && b.LowerBound == 0 && lower == 0 && higher == 0) 266 return new Interval(0, 0); 267 268 //Root is zero ==> undefined ==> 5^-(1.0/0) 269 if (higher == 0 || lower == 0) 270 return new Interval(double.NaN, double.NaN); 271 272 if (lower < 0 || higher < 0) { 273 List<double> vals = new List<double>(); 274 275 vals.Add(Math.Pow(a.LowerBound, 1.0 / lower)); 276 vals.Add(Math.Pow(a.LowerBound, 1.0 / higher)); 277 278 vals.Add(Math.Pow(a.UpperBound, 1.0 / lower)); 279 vals.Add(Math.Pow(a.UpperBound, 1.0 / higher)); 280 281 return new Interval(vals.Min(), vals.Max()); 282 } 283 284 return new Interval(Math.Pow(a.LowerBound, 1.0 / higher), Math.Pow(a.UpperBound, 1.0 / lower)); 285 } 286 238 /// <summary> 239 /// Calculates the principal square root of a given interval. Discards the second possible result of root, because 240 /// all interpreters just calculate the positive principal root. 241 /// </summary> 242 /// <param name="a">Interval to build square root from.</param> 243 /// <returns></returns> 287 244 public static Interval SquareRoot(Interval a) { 288 245 if (a.LowerBound < 0) return new Interval(double.NaN, double.NaN);
Note: See TracChangeset
for help on using the changeset viewer.