Changeset 17993


Ignore:
Timestamp:
06/17/21 08:23:50 (4 months ago)
Author:
gkronber
Message:

#3073: changed compatibility check for IntervalInterpreter to be more specific for integer powers (see r17780)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/IntervalInterpreter.cs

    r17963 r17993  
    287287            var b = Evaluate(instructions, ref instructionCounter, nodeIntervals, variableIntervals);
    288288            // support only integer powers
    289             if(b.LowerBound == b.UpperBound && Math.Truncate(b.LowerBound) == b.LowerBound) {
     289            if (b.LowerBound == b.UpperBound && Math.Truncate(b.LowerBound) == b.LowerBound) {
    290290              result = Interval.Power(a, (int)b.LowerBound);
    291291            } else {
     
    321321
    322322    public static bool IsCompatible(ISymbolicExpressionTree tree) {
    323       var containsUnknownSymbols = (
    324         from n in tree.Root.GetSubtree(0).IterateNodesPrefix()
    325         where
     323      foreach (var n in tree.Root.GetSubtree(0).IterateNodesPrefix()) {
     324        if (
    326325          !(n.Symbol is Variable) &&
    327326          !(n.Symbol is Constant) &&
     
    343342          !(n.Symbol is Power) &&
    344343          !(n.Symbol is Absolute) &&
    345           !(n.Symbol is AnalyticQuotient)
    346         select n).Any();
    347       return !containsUnknownSymbols;
     344          !(n.Symbol is AnalyticQuotient)) return false;
     345
     346        else if (n.Symbol is Power) {
     347          // only integer exponents are supported
     348          var exp = n.GetSubtree(1) as ConstantTreeNode;
     349          if (exp == null || exp.Value != Math.Truncate(exp.Value)) return false;
     350        }
     351      }
     352      return true;
    348353    }
    349354  }
Note: See TracChangeset for help on using the changeset viewer.