>From Peeyush Gupta <[email protected]>:

Peeyush Gupta has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18344 )


Change subject: WIP: Predicate 0.0=-0.0 returns false
......................................................................

WIP: Predicate 0.0=-0.0 returns false

Change-Id: I3cfa0b9cbf149021fd4fd1759f29e7ddba34956f
---
M 
asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ComparatorUtil.java
1 file changed, 32 insertions(+), 6 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/44/18344/1

diff --git 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ComparatorUtil.java
 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ComparatorUtil.java
index 4db23b2..c7296a4 100644
--- 
a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ComparatorUtil.java
+++ 
b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ComparatorUtil.java
@@ -84,9 +84,9 @@
     // start points to the value; checking left and right are compatible and 
numbers has to be done before calling this
     static int compareNumbers(ATypeTag lTag, byte[] l, int lStart, ATypeTag 
rTag, byte[] r, int rStart) {
         if (lTag == DOUBLE || rTag == DOUBLE) {
-            return Double.compare(getDoubleValue(lTag, l, lStart), 
getDoubleValue(rTag, r, rStart));
+            return compareDoubles(getDoubleValue(lTag, l, lStart), 
getDoubleValue(rTag, r, rStart));
         } else if (lTag == FLOAT || rTag == FLOAT) {
-            return Float.compare((float) getDoubleValue(lTag, l, lStart), 
(float) getDoubleValue(rTag, r, rStart));
+            return compareFloats((float) getDoubleValue(lTag, l, lStart), 
(float) getDoubleValue(rTag, r, rStart));
         } else if (lTag == BIGINT || rTag == BIGINT) {
             return Long.compare(getLongValue(lTag, l, lStart), 
getLongValue(rTag, r, rStart));
         } else if (lTag == INTEGER || lTag == SMALLINT || lTag == TINYINT) {
@@ -103,10 +103,10 @@
         byte[] leftBytes = left.getByteArray();
         int start = left.getStartOffset();
         if (leftTag == DOUBLE || rightTag == DOUBLE) {
-            return asResult(Double.compare(getDoubleValue(leftTag, leftBytes, 
start), getConstantDouble(right)));
+            return asResult(compareDoubles(getDoubleValue(leftTag, leftBytes, 
start), getConstantDouble(right)));
         } else if (leftTag == FLOAT || rightTag == FLOAT) {
             return asResult(
-                    Float.compare((float) getDoubleValue(leftTag, leftBytes, 
start), (float) getConstantDouble(right)));
+                    compareFloats((float) getDoubleValue(leftTag, leftBytes, 
start), (float) getConstantDouble(right)));
         } else if (leftTag == BIGINT || rightTag == BIGINT) {
             return asResult(Long.compare(getLongValue(leftTag, leftBytes, 
start), getConstantLong(right)));
         } else if (leftTag == INTEGER || leftTag == SMALLINT || leftTag == 
TINYINT) {
@@ -122,10 +122,10 @@
         ATypeTag leftTag = leftConstant.getType().getTypeTag();
         ATypeTag rightTag = rightConstant.getType().getTypeTag();
         if (leftTag == DOUBLE || rightTag == DOUBLE) {
-            return asResult(Double.compare(getConstantDouble(leftConstant), 
getConstantDouble(rightConstant)));
+            return asResult(compareDoubles(getConstantDouble(leftConstant), 
getConstantDouble(rightConstant)));
         } else if (leftTag == FLOAT || rightTag == FLOAT) {
             return asResult(
-                    Float.compare((float) getConstantDouble(leftConstant), 
(float) getConstantDouble(rightConstant)));
+                    compareFloats((float) getConstantDouble(leftConstant), 
(float) getConstantDouble(rightConstant)));
         } else if (leftTag == BIGINT || rightTag == BIGINT) {
             return asResult(Long.compare(getConstantLong(leftConstant), 
getConstantLong(rightConstant)));
         } else if (leftTag == INTEGER || leftTag == SMALLINT || leftTag == 
TINYINT) {
@@ -208,4 +208,21 @@
                 throw new UnsupportedOperationException();
         }
     }
+
+    public static int compareDoubles(double d1, double d2) {
+        if (d1 < d2)
+            return -1; // Neither val is NaN, thisVal is smaller
+        if (d1 > d2)
+            return 1; // Neither val is NaN, thisVal is larger
+        return 0;
+    }
+
+    public static int compareFloats(float f1, float f2) {
+        if (f1 < f2)
+            return -1; // Neither val is NaN, thisVal is smaller
+        if (f1 > f2)
+            return 1; // Neither val is NaN, thisVal is larger
+        return 0;
+    }
+
 }

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18344
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: neo
Gerrit-Change-Id: I3cfa0b9cbf149021fd4fd1759f29e7ddba34956f
Gerrit-Change-Number: 18344
Gerrit-PatchSet: 1
Gerrit-Owner: Peeyush Gupta <[email protected]>
Gerrit-MessageType: newchange

Reply via email to