]> granicus.if.org Git - python/commitdiff
Patch by Nadav Horesh to make acosh and asinh better.
authorGuido van Rossum <guido@python.org>
Fri, 30 Jun 2000 02:29:22 +0000 (02:29 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 30 Jun 2000 02:29:22 +0000 (02:29 +0000)
Tim posted a long comment to python-dev (subject: "Controversial patch
(cmath)"; date: 6/29/00).  The conclusion is that this whole module
stinks and this patch isn't perfect, but it's better than the acosh
and asinh we had, so let's check it in.

Modules/cmathmodule.c

index ab8b5e1271a727973aef48937928e6aa5970b10e..313827b211c20ff102a6e1ca66c7c7421038b4b4 100644 (file)
@@ -57,8 +57,11 @@ Return the arc cosine of x.";
 static Py_complex c_acosh(x)
        Py_complex x;
 {
-       return c_log(c_sum(x,c_prod(c_i,
-                   c_sqrt(c_diff(c_1,c_prod(x,x))))));
+       Py_complex z;
+       z = c_sqrt(c_half);
+       z = c_log(c_prod(z, c_sum(c_sqrt(c_sum(x,c_1)),
+                                 c_sqrt(c_diff(x,c_1)))));
+       return c_sum(z, z);
 }
 
 static char c_acosh_doc [] =
@@ -70,8 +73,11 @@ Return the hyperbolic arccosine of x.";
 static Py_complex c_asin(x)
        Py_complex x;
 {
-       return c_neg(c_prodi(c_log(c_sum(c_prod(c_i,x),
-                   c_sqrt(c_diff(c_1,c_prod(x,x)))))));
+       Py_complex z;
+       z = c_sqrt(c_half);
+       z = c_log(c_prod(z, c_sum(c_sqrt(c_sum(x,c_i)),
+                                 c_sqrt(c_diff(x,c_i)))));
+       return c_sum(z, z);
 }
 
 static char c_asin_doc [] =
@@ -85,9 +91,8 @@ static Py_complex c_asinh(x)
 {
        /* Break up long expression for WATCOM */
        Py_complex z;
-       z = c_sum(c_1,c_prod(x,x));
-       z = c_diff(c_sqrt(z),x);
-       return c_neg(c_log(z));
+       z = c_sum(c_1,c_prod(x, x));
+       return c_log(c_sum(c_sqrt(z), x));
 }
 
 static char c_asinh_doc [] =