You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2012/08/24 00:12:06 UTC

svn commit: r1376727 - /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java

Author: prestonc
Date: Thu Aug 23 22:12:05 2012
New Revision: 1376727

URL: http://svn.apache.org/viewvc?rev=1376727&view=rev
Log:
Updated the overflow condition for decimal.

Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java?rev=1376727&r1=1376726&r2=1376727&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java Thu Aug 23 22:12:05 2012
@@ -64,14 +64,14 @@ public class MultiplyOperation extends A
         long value2 = decp2.getDecimalValue();
         byte place1 = decp1.getDecimalPlace();
         byte place2 = decp2.getDecimalPlace();
-        if (value1 > Long.MAX_VALUE / value2) {
+        if (Math.abs(value1) > Long.MAX_VALUE / Math.abs(value2)) {
             throw new SystemException(ErrorCode.XPDY0002);
         }
         value1 *= value2;
         place1 += place2;
         dOut.write(ValueTag.XS_DECIMAL_TAG);
         dOut.writeByte(place1);
-        dOut.writeDouble(value1);
+        dOut.writeLong(value1);
     }
 
     @Override
@@ -378,7 +378,7 @@ public class MultiplyOperation extends A
         byte place1 = decp1.getDecimalPlace();
         byte place2 = decp2.getDecimalPlace();
         // Divide
-        if (value1 > Long.MAX_VALUE / value2) {
+        if (Math.abs(value1) > Long.MAX_VALUE / Math.abs(value2)) {
             throw new SystemException(ErrorCode.XPDY0002);
         }
         value1 *= value2;