ArithmeticException: Non-terminating decimal expansion with non-executable model after jitting

Solution Verified - Updated -

Issue

When BigDecimal-type "divide" expression value / 7B (*1-1) in the following rule (*1) is 15B / 7B, the constraint evaluation starts failing with ArithmeticException (*2-1) after it was evaluated several times.

(*1) Example rule

dialect "mvel"

rule "Rule 1"
    when
        $fact : Fact( value / 7B >= 0 )    <---------- (*1-1)
    then
        System.out.println("***** " + drools.getRule().getName() + ": $fact = " + $fact);
        modify($fact) {
            value = $fact.value
        }
end
// value is a BigDecimal property of Fact class.

(*2) Error message

org.drools.mvel.ConstraintEvaluationException: Error evaluating constraint 'value / 7B >= 0' in [Rule "Rule 1" in /tmp/reproducer_arithmeticexception_1c/target/classes/com/example/reproducer/Sample.drl]
    at org.drools.mvel.MVELConstraint.evaluate(MVELConstraint.java:287)
    at org.drools.mvel.MVELConstraint.isAllowed(MVELConstraint.java:235)
    at org.drools.core.reteoo.AlphaNode.modifyObject(AlphaNode.java:145)
    at org.drools.core.reteoo.SingleObjectSinkAdapter.propagateModifyObject(SingleObjectSinkAdapter.java:79)
    at org.drools.core.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:396)
    at org.drools.core.phreak.PropagationEntry$Update.execute(PropagationEntry.java:233)
    at org.drools.core.phreak.PropagationEntry$Update.execute(PropagationEntry.java:225)
    at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:100)
    at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:90)
    at org.drools.core.common.DefaultAgenda.flushPropagations(DefaultAgenda.java:1074)
    at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:165)
    at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:110)
    at org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire(AbstractRuleEvaluator.java:33)
    at org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43)
    at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:869)
    at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:816)
    at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:808)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1341)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1332)
    at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1316)
    at com.example.reproducer.DroolsTest.main(DroolsTest.java:22)
Caused by: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.    <---------- (*2-1)
    at java.base/java.math.BigDecimal.divide(BigDecimal.java:1736)
    at ConditionEvaluator05169571c7d846e3b0c6e6e4439e0ef9.evaluate(Unknown Source)
    at org.drools.mvel.MVELConstraint.evaluate(MVELConstraint.java:285)

Environment

  • Red Hat Process Automation Manager (RHPAM)
    • 7.13
  • Red Hat Decision Manager (RHDM)
    • 7.13

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content