diff options
author | enge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2010-05-15 15:15:15 +0000 |
---|---|---|
committer | enge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2010-05-15 15:15:15 +0000 |
commit | 62f6420be5d25f85138f197ba17ea17cc1f6fcba (patch) | |
tree | b0b98bf26bc2334cde973a5cbfd9a9eb5da1495f /src/pow_si.c | |
parent | 36b5342ad822f72841e74de0a72c3e7a211119d0 (diff) | |
download | mpc-62f6420be5d25f85138f197ba17ea17cc1f6fcba.tar.gz |
pow_si: trivial speed-up for positive exponent
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@770 211d60ee-9f03-0410-a15a-8952a2c7a4e4
Diffstat (limited to 'src/pow_si.c')
-rw-r--r-- | src/pow_si.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/pow_si.c b/src/pow_si.c index 0105b72..c7f3957 100644 --- a/src/pow_si.c +++ b/src/pow_si.c @@ -1,6 +1,6 @@ /* mpc_pow_si -- Raise a complex number to an integer power. -Copyright (C) 2009 Paul Zimmermann +Copyright (C) 2009, 2010 Paul Zimmermann, Andreas Enge This file is part of the MPC Library. @@ -25,13 +25,16 @@ MA 02111-1307, USA. */ int mpc_pow_si (mpc_ptr z, mpc_srcptr x, long y, mpc_rnd_t rnd) { - mpc_t yy; - int inex; - - mpc_init3 (yy, sizeof (unsigned long) * CHAR_BIT, MPFR_PREC_MIN); - mpc_set_si (yy, y, MPC_RNDNN); /* exact */ - inex = mpc_pow (z, x, yy, rnd); - mpc_clear (yy); - return inex; + if (y >= 0) + return mpc_pow_ui (z, x, (unsigned long) y, rnd); + else { + mpc_t yy; + int inex; + + mpc_init3 (yy, sizeof (unsigned long) * CHAR_BIT, MPFR_PREC_MIN); + mpc_set_si (yy, y, MPC_RNDNN); /* exact */ + inex = mpc_pow (z, x, yy, rnd); + mpc_clear (yy); + return inex; + } } - |