aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/tensor/functions
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2021-09-23 05:12:31 +0000
committerArne H Juul <arnej@yahooinc.com>2021-09-23 10:43:15 +0000
commit90133d8a4366bcd1b98eeb77889a9e3aa8244ed9 (patch)
tree36aa6d4c6947616bfcc87ab4a8a298a146647422 /vespajlib/src/main/java/com/yahoo/tensor/functions
parenteab6470364b66d261ce8f9669cd22ffe4ff0bf80 (diff)
add "hamming" function
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/tensor/functions')
-rw-r--r--vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunctions.java21
1 files changed, 21 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunctions.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunctions.java
index 3ee9e67cdd6..d6fcd17b8fb 100644
--- a/vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunctions.java
+++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/ScalarFunctions.java
@@ -33,6 +33,7 @@ public class ScalarFunctions {
public static DoubleBinaryOperator pow() { return new Pow(); }
public static DoubleBinaryOperator squareddifference() { return new SquaredDifference(); }
public static DoubleBinaryOperator subtract() { return new Subtract(); }
+ public static DoubleBinaryOperator hamming() { return new Hamming(); }
public static DoubleUnaryOperator abs() { return new Abs(); }
public static DoubleUnaryOperator acos() { return new Acos(); }
@@ -152,6 +153,26 @@ public class ScalarFunctions {
public String toString() { return "f(a,b)(a - b)"; }
}
+
+ public static class Hamming implements DoubleBinaryOperator {
+ public static double hamming(double left, double right) {
+ double distance = 0;
+ byte a = (byte) left;
+ byte b = (byte) right;
+ for (int i = 0; i < 8; i++) {
+ byte bit = (byte) (1 << i);
+ if ((a & bit) != (b & bit)) {
+ distance += 1;
+ }
+ }
+ return distance;
+ }
+ @Override
+ public double applyAsDouble(double left, double right) { return hamming(left, right); }
+ @Override
+ public String toString() { return "f(a,b)(hamming(a,b))"; }
+ }
+
// Unary operators ------------------------------------------------------------------------------