Reviewers: jat,
Description:
Fix implementation of Math.sinh and Math.tanh (external issue 4991)
Please review this at http://gwt-code-reviews.appspot.com/602801/show
Affected files:
M user/super/com/google/gwt/emul/java/lang/Math.java
M user/test/com/google/gwt/emultest/java/lang/MathTest.java
Index: user/super/com/google/gwt/emul/java/lang/Math.java
===================================================================
--- user/super/com/google/gwt/emul/java/lang/Math.java (revision 8240)
+++ user/super/com/google/gwt/emul/java/lang/Math.java (working copy)
@@ -27,10 +27,12 @@
private static final double PI_UNDER_180 = 180.0 / PI;
public static double abs(double x) {
+// return (x <= 0.0) ? 0.0 - x : x;
return x < 0 ? -x : x;
}
public static float abs(float x) {
+// return (x <= 0.0) ? 0.0 - x : x;
return x < 0 ? -x : x;
}
@@ -253,7 +255,7 @@
}-*/;
public static native double sinh(double x) /*-{
- return Math.sinh(x);
+ return (Math.exp(x) - Math.exp(-x)) / 2.0;
}-*/;
public static native double sqrt(double x) /*-{
@@ -265,7 +267,8 @@
}-*/;
public static native double tanh(double x) /*-{
- return Math.tanh(x);
+ var e2x = Math.exp(2.0 * x);
+ return (e2x - 1) / (e2x + 1);
}-*/;
public static double toDegrees(double x) {
Index: user/test/com/google/gwt/emultest/java/lang/MathTest.java
===================================================================
--- user/test/com/google/gwt/emultest/java/lang/MathTest.java (revision
8240)
+++ user/test/com/google/gwt/emultest/java/lang/MathTest.java (working copy)
@@ -30,6 +30,17 @@
return "com.google.gwt.emultest.EmulSuite";
}
+ public void testAbs() {
+ double v = Math.abs(-1.0);
+ assertEquals(1.0, v);
+ v = Math.abs(1.0);
+ assertEquals(1.0, v);
+ v = Math.abs(-1.0 / Double.POSITIVE_INFINITY); // -0.0
+ assertEquals(0.0, v);
+ v = Math.abs(0.0);
+ assertEquals(0.0, v);
+ }
+
public void testCbrt() {
double v = Math.cbrt(1000.0);
assertEquals(10.0, v, 1e-7);
@@ -44,6 +55,15 @@
assertEquals(-1.0, v, 1e-7);
v = Math.cos(Math.PI * 1.5);
assertEquals(0.0, v, 1e-7);
+ }
+
+ public void testCosh() {
+ double v = Math.cosh(0.0);
+ assertEquals(1.0, v, 1e-7);
+ v = Math.cosh(1.0);
+ assertEquals(1.5430806348, v, 1e-7);
+ v = Math.cosh(-1.0);
+ assertEquals(1.5430806348, v, 1e-7);
}
public void testLog() {
@@ -66,4 +86,22 @@
v = Math.sin(Math.PI * 1.5);
assertEquals(-1.0, v, 1e-7);
}
+
+ public void testSinh() {
+ double v = Math.sinh(0.0);
+ assertEquals(0.0, v, 1e-7);
+ v = Math.sinh(1.0);
+ assertEquals(1.175201193, v, 1e-7);
+ v = Math.sinh(-1.0);
+ assertEquals(-1.175201193, v, 1e-7);
+ }
+
+ public void testTanh() {
+ double v = Math.tanh(0.0);
+ assertEquals(0.0, v, 1e-7);
+ v = Math.tanh(1.0);
+ assertEquals(0.761594155, v, 1e-7);
+ v = Math.tanh(-1.0);
+ assertEquals(-0.761594155, v, 1e-7);
+ }
}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors