summaryrefslogtreecommitdiff
path: root/src/cache.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2014-02-13 18:25:08 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2014-02-13 18:25:08 +0000
commit62f54c16efcff128a13211aeba5ce7ed48ec99c2 (patch)
tree3ee44daa0b0949481f31f79b03668c6b683c52e0 /src/cache.c
parent141c3d8ec2b1b04aa8cfbd76505bde0c477f3b51 (diff)
downloadmpfr-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.c6
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);