diff options
author | zimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2010-05-15 08:05:57 +0000 |
---|---|---|
committer | zimmerma <zimmerma@211d60ee-9f03-0410-a15a-8952a2c7a4e4> | 2010-05-15 08:05:57 +0000 |
commit | 6da61c7fe250b2a1770cd536653510a666e3af2e (patch) | |
tree | 45b58e444d88b547a405695e948586817f170ecd /src/pow_z.c | |
parent | 4f0bb20965e51cde6383d69dc8abc9a84b6d18ae (diff) | |
download | mpc-6da61c7fe250b2a1770cd536653510a666e3af2e.tar.gz |
[src/pow_z.c] calls mpc_pow_ui or mpc_pow_si when the exponent fits
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@767 211d60ee-9f03-0410-a15a-8952a2c7a4e4
Diffstat (limited to 'src/pow_z.c')
-rw-r--r-- | src/pow_z.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/pow_z.c b/src/pow_z.c index 9ce20d1..9b769fe 100644 --- a/src/pow_z.c +++ b/src/pow_z.c @@ -1,6 +1,6 @@ /* mpc_pow_z -- Raise a complex number to an integer power. -Copyright (C) 2009 Paul Zimmermann +Copyright (C) 2009, 2010 Paul Zimmermann This file is part of the MPC Library. @@ -28,6 +28,13 @@ mpc_pow_z (mpc_ptr z, mpc_srcptr x, mpz_srcptr y, mpc_rnd_t rnd) int inex; size_t n = mpz_sizeinbase (y, 2); + /* if y fits in an unsigned long or long, call the corresponding functions, + which are supposed to be more efficient */ + if (mpz_fits_ulong_p (y)) + return mpc_pow_ui (z, x, mpz_get_ui (y), rnd); + else if (mpz_fits_slong_p (y)) + return mpc_pow_si (z, x, mpz_get_si (y), rnd); + mpc_init3 (yy, (n < MPFR_PREC_MIN) ? MPFR_PREC_MIN : n, MPFR_PREC_MIN); mpc_set_z (yy, y, MPC_RNDNN); /* exact */ inex = mpc_pow (z, x, yy, rnd); |