>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