* simplify.c (gfc_simplify_abs): Use mpfr_hypot for CABS.
authorTobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>
Wed, 6 Oct 2004 23:16:43 +0000 (01:16 +0200)
committerTobias Schlüter <tobi@gcc.gnu.org>
Wed, 6 Oct 2004 23:16:43 +0000 (01:16 +0200)
From-SVN: r88647

gcc/fortran/ChangeLog
gcc/fortran/simplify.c

index d52914f419a13281edf5d28fe6cedc7eb2518548..276e5864b8bd627d921f93f7b38d061933494732 100644 (file)
@@ -4,6 +4,8 @@
        * simplify.c (twos_complement): New function.
        (gfc_simplify_ishft, gfc_simplify_ishftc): Revise.
 
+       * simplify.c (gfc_simplify_abs): Use mpfr_hypot for CABS.
+
 2004-10-06  Paul Brook  <paul@codesourcery.com>
 
        * trans-stmt.c (gfc_trans_simple_do): New function.
index 0ac9d618bd25018549c21e4d74440ba74560fb4f..253f68677a12367e636dc8c49a79ef95f2767b1e 100644 (file)
@@ -176,7 +176,6 @@ gfc_expr *
 gfc_simplify_abs (gfc_expr * e)
 {
   gfc_expr *result;
-  mpfr_t a, b;
 
   if (e->expr_type != EXPR_CONSTANT)
     return NULL;
@@ -203,17 +202,9 @@ gfc_simplify_abs (gfc_expr * e)
       result = gfc_constant_result (BT_REAL, e->ts.kind, &e->where);
 
       gfc_set_model_kind (e->ts.kind);
-      mpfr_init (a);
-      mpfr_init (b);
-      /* FIXME:  Possible numerical problems.  */
-      mpfr_mul (a, e->value.complex.r, e->value.complex.r, GFC_RND_MODE);
-      mpfr_mul (b, e->value.complex.i, e->value.complex.i, GFC_RND_MODE);
-      mpfr_add (a, a, b, GFC_RND_MODE);
-      mpfr_sqrt (result->value.real, a, GFC_RND_MODE);
-
-      mpfr_clear (a);
-      mpfr_clear (b);
 
+      mpfr_hypot (result->value.real, e->value.complex.r, 
+                 e->value.complex.i, GFC_RND_MODE);
       result = range_check (result, "CABS");
       break;