summaryrefslogtreecommitdiff
path: root/src/pow_si.c
diff options
context:
space:
mode:
authorenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2010-05-15 15:15:15 +0000
committerenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2010-05-15 15:15:15 +0000
commit62f6420be5d25f85138f197ba17ea17cc1f6fcba (patch)
treeb0b98bf26bc2334cde973a5cbfd9a9eb5da1495f /src/pow_si.c
parent36b5342ad822f72841e74de0a72c3e7a211119d0 (diff)
downloadmpc-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.c23
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;
+ }
}
-