This is an automated email from the ASF dual-hosted git repository. sewen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/flink.git
commit 5545d8afeadac62b71455d08ab0390c76e98b552 Author: wangxiyuan <wangxiyuan1...@gmail.com> AuthorDate: Thu Dec 5 14:41:41 2019 +0800 [FLINK-13450][table api] Use StrictMath instead of Math for exp This ensures compatibility of results across processor architectures This closes #10432 --- .../org/apache/flink/table/codegen/calls/BuiltInMethods.scala | 2 +- .../flink/table/runtime/functions/ScalarFunctions.scala | 11 +++++++++++ .../apache/flink/table/expressions/SqlExpressionTest.scala | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala index 4ccbb9a..a1529ec 100644 --- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala +++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/codegen/calls/BuiltInMethods.scala @@ -45,7 +45,7 @@ object BuiltInMethods { val LOG2 = Types.lookupMethod(classOf[ScalarFunctions], "log2", classOf[Double]) - val EXP = Types.lookupMethod(classOf[Math], "exp", classOf[Double]) + val EXP = Types.lookupMethod(classOf[ScalarFunctions], "exp", classOf[Double]) val POWER = Types.lookupMethod(classOf[Math], "pow", classOf[Double], classOf[Double]) val POWER_DEC = Types.lookupMethod( diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala index 5aaacd4..40f5d53 100644 --- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala +++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/runtime/functions/ScalarFunctions.scala @@ -116,6 +116,17 @@ object ScalarFunctions { } /** + * Returns exp(x). + */ + def exp(x: Double): Double = { + if (x <= 0.0) { + throw new IllegalArgumentException(s"x of 'exp(x)' must be > 0, but x = $x") + } else { + StrictMath.exp(x) + } + } + + /** * Calculates the hyperbolic tangent of a big decimal number. */ def tanh(x: JBigDecimal): Double = { diff --git a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala index e162d9e..fc7f882 100644 --- a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala +++ b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/SqlExpressionTest.scala @@ -104,7 +104,7 @@ class SqlExpressionTest extends ExpressionTestBase { testSqlApi("LOG2(8)", "3.0") testSqlApi("LOG(E())", "1.0") testSqlApi("LOG(3,27)", "3.0000000000000004") - testSqlApi("EXP(1)", "2.718281828459045") + testSqlApi("EXP(1)", "2.7182818284590455") testSqlApi("CEIL(2.5)", "3") testSqlApi("CEILING(2.5)", "3") testSqlApi("FLOOR(2.5)", "2")