Fix Math.tanh when applied to values > ~355.

PiperOrigin-RevId: 311832683
Change-Id: I806129162c3af643527c4bbce1c88ee027662bc2
diff --git a/user/super/com/google/gwt/emul/java/lang/Math.java b/user/super/com/google/gwt/emul/java/lang/Math.java
index 1053db3..5bf6829 100644
--- a/user/super/com/google/gwt/emul/java/lang/Math.java
+++ b/user/super/com/google/gwt/emul/java/lang/Math.java
@@ -308,7 +308,7 @@
   public static native double sin(double x);
 
   public static double sinh(double x) {
-    return x == 0 ? x : (exp(x) - exp(-x)) / 2;
+    return x == 0.0 ? x : (exp(x) - exp(-x)) / 2;
   }
 
   @JsMethod(namespace = JsPackage.GLOBAL, name = "Math.sqrt")
@@ -319,13 +319,15 @@
 
   public static double tanh(double x) {
     if (x == 0.0) {
+      // -0.0 should return -0.0.
       return x;
-    } else if (Double.isInfinite(x)) {
-      return signum(x);
-    } else {
-      double e2x = exp(2 * x);
-      return (e2x - 1) / (e2x + 1);
     }
+
+    double e2x = exp(2 * x);
+    if (Double.isInfinite(e2x)) {
+      return 1;
+    }
+    return (e2x - 1) / (e2x + 1);
   }
 
   public static double toDegrees(double x) {
diff --git a/user/test/com/google/gwt/emultest/java/lang/MathTest.java b/user/test/com/google/gwt/emultest/java/lang/MathTest.java
index 20897a4..50e4d1d 100644
--- a/user/test/com/google/gwt/emultest/java/lang/MathTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/MathTest.java
@@ -579,8 +579,14 @@
     assertEquals(0.761594155, v, 1e-7);
     v = Math.tanh(-1.0);
     assertEquals(-0.761594155, v, 1e-7);
+    v = Math.tanh(500);
+    assertEquals(1.0, v, 1e-7);
+    v = Math.tanh(-500);
+    assertEquals(-1.0, v, 1e-7);
     v = Math.tanh(Double.NaN);
     assertNaN(v);
+    v = Math.tanh(Double.MAX_VALUE);
+    assertEquals(1.0, v, 1e-7);
     v = Math.tanh(Double.NEGATIVE_INFINITY);
     assertEquals(-1.0, v, 1e-7);
     v = Math.tanh(Double.POSITIVE_INFINITY);