summaryrefslogtreecommitdiff
path: root/sin.c
diff options
context:
space:
mode:
authorzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2005-01-28 16:57:22 +0000
committerzimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4>2005-01-28 16:57:22 +0000
commit4854dc886c95c65f1e98ee00c39d7ef1cc52318f (patch)
treee5b905df98f487be9761f16bcfc47a2612af4ed1 /sin.c
parentf3de09b521ae03cf47a90349b15636fe6c04225f (diff)
downloadmpfr-4854dc886c95c65f1e98ee00c39d7ef1cc52318f.tar.gz
solved efficiency problem in mpfr_sin_sign for x near Pi
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@3245 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'sin.c')
-rw-r--r--sin.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sin.c b/sin.c
index 0b2d998e2..3271bcf14 100644
--- a/sin.c
+++ b/sin.c
@@ -31,7 +31,7 @@ mpfr_sin_sign (mpfr_srcptr x)
{
mpfr_t c, k;
mp_exp_t K;
- int sign;
+ int sign, loops = 0;
mp_prec_t m;
mpfr_srcptr y;
@@ -46,7 +46,10 @@ mpfr_sin_sign (mpfr_srcptr x)
do
{
+ loops ++;
m += BITS_PER_MP_LIMB;
+ if (loops > 2) /* maybe a massive cancellation, like for x near from Pi */
+ m += MPFR_PREC(x) / 2;
mpfr_set_prec (c, m);
mpfr_set_prec (k, m);