gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-944


From: Andrew J. Schorr
Subject: [gawk-diffs] [SCM] gawk branch, gawk-4.1-stable, updated. gawk-4.1.0-944-g95bb498
Date: Mon, 1 Aug 2016 17:31:50 +0000 (UTC)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, gawk-4.1-stable has been updated
       via  95bb49821598e92e05ebbbd6acea6fb9ffaa5b44 (commit)
      from  140a4a886edc231f1c5f02c6cd4c82effe58139e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=95bb49821598e92e05ebbbd6acea6fb9ffaa5b44

commit 95bb49821598e92e05ebbbd6acea6fb9ffaa5b44
Author: Andrew J. Schorr <address@hidden>
Date:   Mon Aug 1 13:31:13 2016 -0400

    Fix MPFR bug where precision was reduced to that of the function argument.

diff --git a/ChangeLog b/ChangeLog
index 54bd868..28836da 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2016-08-01         Andrew J. Schorr     <address@hidden>
+
+       * mpfr.c (default_prec): Add new static variable to show current PREC
+       setting in effect.
+       (init_mpfr, set_PREC): Save mpfr_set_default_prec argument in
+       default_prec.
+       (do_mpfr_func): If the argument's precision exceeds the default 
precision,
+       boost the result's precision to match it. This fixes a bug where
+       we used to copy the argument's precision, regardless of whether it
+       was higher or lower than the PREC setting.
+
 2016-07-23         Andrew J. Schorr     <address@hidden>
 
        * builtin.c (do_print): Improve logic for formatting
diff --git a/mpfr.c b/mpfr.c
index 9b9e538..0f60289 100644
--- a/mpfr.c
+++ b/mpfr.c
@@ -39,6 +39,8 @@ mpz_t MFNR;
 bool do_ieee_fmt;      /* IEEE-754 floating-point emulation */
 mpfr_rnd_t ROUND_MODE;
 
+static mpfr_prec_t default_prec;
+
 static mpfr_rnd_t get_rnd_mode(const char rmode);
 static NODE *mpg_force_number(NODE *n);
 static NODE *mpg_make_number(double);
@@ -70,7 +72,7 @@ static inline mpfr_ptr mpg_tofloat(mpfr_ptr mf, mpz_ptr mz);
 void
 init_mpfr(mpfr_prec_t prec, const char *rmode)
 {
-       mpfr_set_default_prec(prec);
+       mpfr_set_default_prec(default_prec = prec);
        ROUND_MODE = get_rnd_mode(rmode[0]);
        mpfr_set_default_rounding_mode(ROUND_MODE);
        make_number = mpg_make_number;
@@ -561,7 +563,7 @@ set_PREC()
        }
 
        if (prec > 0)
-               mpfr_set_default_prec(prec);
+               mpfr_set_default_prec(default_prec = prec);
 }
 
 
@@ -705,6 +707,7 @@ do_mpfr_func(const char *name,
        NODE *t1, *res;
        mpfr_ptr p1;
        int tval;
+       mpfr_prec_t argprec;
 
        t1 = POP_SCALAR();
        if (do_lint && (t1->flags & (NUMCUR|NUMBER)) == 0)
@@ -713,7 +716,8 @@ do_mpfr_func(const char *name,
        force_number(t1);
        p1 = MP_FLOAT(t1);
        res = mpg_float();
-       mpfr_set_prec(res->mpg_numbr, mpfr_get_prec(p1));       /* needed at 
least for sqrt() */
+       if ((argprec = mpfr_get_prec(p1)) > default_prec)
+               mpfr_set_prec(res->mpg_numbr, argprec); /* needed at least for 
sqrt() */
        tval = mpfr_func(res->mpg_numbr, p1, ROUND_MODE);
        IEEE_FMT(res->mpg_numbr, tval);
        DEREF(t1);

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog |   11 +++++++++++
 mpfr.c    |   10 +++++++---
 2 files changed, 18 insertions(+), 3 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]