aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-08-01 22:17:42 +0300
committerArnold D. Robbins <arnold@skeeve.com>2016-08-01 22:17:42 +0300
commitd3c83f2df4734735c11cc1e157a63fc580981b3f (patch)
tree066f0b36264a8d46fe2cc01d84139f81c0b57778
parent5da25619741b53c6f51dd86617f10591486477ae (diff)
parent265bcc19d0ee3c8bfde5d91258345c864810e995 (diff)
downloadegawk-d3c83f2df4734735c11cc1e157a63fc580981b3f.tar.gz
egawk-d3c83f2df4734735c11cc1e157a63fc580981b3f.tar.bz2
egawk-d3c83f2df4734735c11cc1e157a63fc580981b3f.zip
Merge branch 'gawk-4.1-stable' of ssh://git.sv.gnu.org/srv/git/gawk into gawk-4.1-stable
-rw-r--r--ChangeLog5
-rw-r--r--mpfr.c12
2 files changed, 15 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 45f6e62a..9ac5be64 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,11 @@
2016-08-01 Andrew J. Schorr <aschorr@telemetry-investments.com>
+ * mpfr.c (mpg_tofloat): Always set precision to avoid hysteresis effects
+ from previous calculations using the same temporary mpfr variables.
+
+2016-08-01 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
* 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
diff --git a/mpfr.c b/mpfr.c
index 0f602898..db2eb697 100644
--- a/mpfr.c
+++ b/mpfr.c
@@ -1218,9 +1218,17 @@ mpg_tofloat(mpfr_ptr mf, mpz_ptr mz)
prec -= (size_t) mpz_scan1(mz, 0); /* least significant 1 bit index starting at 0 */
if (prec > MPFR_PREC_MAX)
prec = MPFR_PREC_MAX;
- if (prec > PRECISION_MIN)
- mpfr_set_prec(mf, prec);
+ else if (prec < PRECISION_MIN)
+ prec = PRECISION_MIN;
}
+ else
+ prec = PRECISION_MIN;
+ /*
+ * Always set the precision to avoid hysteresis, since do_mpfr_func
+ * may copy our precision.
+ */
+ if (prec != mpfr_get_prec(mf))
+ mpfr_set_prec(mf, prec);
mpfr_set_z(mf, mz, ROUND_MODE);
return mf;