richardstartin commented on code in PR #8563:
URL: https://github.com/apache/pinot/pull/8563#discussion_r853972376


##########
pinot-common/src/main/java/org/apache/pinot/common/function/scalar/ArithmeticFunctions.java:
##########
@@ -153,4 +152,19 @@ public static double truncate(double a, int scale) {
   public static double truncate(double a) {
     return Math.signum(a) * Math.floor(Math.abs(a));
   }
+
+  @ScalarFunction(names = {"gte"})
+  public static boolean greaterThanOrEquals(double a, double b) {
+    return a >= b;
+  }
+
+  @ScalarFunction(names = {"lte"})
+  public static boolean lessThanOrEquals(double a, double b) {
+    return a <= b;
+  }
+
+  @ScalarFunction
+  public static boolean equals(double a, double b) {
+    return a == b;

Review Comment:
   No, that would produce odd results too. `double`s should be compared for 
equality within a tolerance because they are an _approximation_ of a number and 
the error in the approximation should be accounted for.
   
   For example, consider this program, which accumulates 1% 100 times:
   
   ```java
       double d = 0.00;
       for (int i = 0; i < 100; i++) {
         d += 0.01;
       }
       System.out.println(d == 1D);
       System.out.println(Double.compare(d, 1D));
       System.out.println(Math.abs(d - 1D) < 1e-15);
   ```
   
   it prints:
   
   ```
   false
   1
   true
   ```
   
   because 1% isn't finitely expressible in base 2. However, the quantity is 
clearly an approximation of 1. In order to make this function robust to 
arithmetic performed by transform functions (prior to persistence or at query 
time) equality should be verified relative to a small tolerance (1e-7 would be 
best).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to