MathUnaryFunction saturates large doubles to Long.MAX_VALUE when collapsing to long (original) (raw)
Affected version: 26.4.2 (confirmed still present in 26.5.1)
Component: com.arcadedb.function.math.MathUnaryFunction / MathBinaryFunction
Summary
For large doubles where result == Math.floor(result) (every value above2^52), (long) result saturates to Long.MAX_VALUE / Long.MIN_VALUE.math.floor(1e30) returns 9223372036854775807L.
Code
engine/com/arcadedb/function/math/MathUnaryFunction.java:51–54
(same pattern in MathBinaryFunction.java:47)
final double result = op.applyAsDouble(((Number) args[0]).doubleValue()); if (result == Math.floor(result) && !Double.isInfinite(result)) return (long) result; return result;
Suggested fix
if (result >= Long.MIN_VALUE && result <= Long.MAX_VALUE && result == Math.floor(result)) return (long) result; return result;