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")

Reply via email to