diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2014-02-13 18:25:08 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2014-02-13 18:25:08 +0000 |
commit | 62f54c16efcff128a13211aeba5ce7ed48ec99c2 (patch) | |
tree | 3ee44daa0b0949481f31f79b03668c6b683c52e0 /src/cache.c | |
parent | 141c3d8ec2b1b04aa8cfbd76505bde0c477f3b51 (diff) | |
download | mpfr-62f54c16efcff128a13211aeba5ce7ed48ec99c2.tar.gz |
when recomputing a constant, use a precision 10% larger than the wanted
precision to avoid many recomputations
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@8966 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'src/cache.c')
-rw-r--r-- | src/cache.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cache.c b/src/cache.c index a9b0602e7..a054682a2 100644 --- a/src/cache.c +++ b/src/cache.c @@ -60,8 +60,10 @@ mpfr_cache (mpfr_ptr dest, mpfr_cache_t cache, mpfr_rnd_t rnd) if (MPFR_UNLIKELY (pold == 0)) /* No previous result. */ mpfr_init2 (cache->x, prec); - /* Update the cache. */ - pold = prec; + /* Update the cache. We add prec/10 to avoid invalidating the cache + many times if one performs several computations with increasing + precision. */ + pold = prec + (prec / 10); /* no need to keep the previous value */ mpfr_set_prec (cache->x, pold); cache->inexact = (*cache->func) (cache->x, MPFR_RNDN); |