summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-01-23 18:08:28 +0000
committerenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-01-23 18:08:28 +0000
commit85c8e57d4cbbb5c24babdbf53a87a3ef40c43aea (patch)
tree4eec5e99ff6fcaddfae5f43cc302633ab37e00bf /src
parent04d836e20bad46104f9ff06c3bce5349dbfa362d (diff)
downloadmpc-85c8e57d4cbbb5c24babdbf53a87a3ef40c43aea.tar.gz
define 0^0 as (1,+0), since the sign of the imaginary part cannot be determined
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@1121 211d60ee-9f03-0410-a15a-8952a2c7a4e4
Diffstat (limited to 'src')
-rw-r--r--src/pow.c32
1 files changed, 4 insertions, 28 deletions
diff --git a/src/pow.c b/src/pow.c
index f6d54a8..3c4e8dc 100644
--- a/src/pow.c
+++ b/src/pow.c
@@ -1,6 +1,6 @@
/* mpc_pow -- Raise a complex number to the power of another complex number.
-Copyright (C) 2009, 2010, 2011 INRIA
+Copyright (C) 2009, 2010, 2011, 2012 INRIA
This file is part of GNU MPC.
@@ -491,34 +491,10 @@ mpc_pow (mpc_ptr z, mpc_srcptr x, mpc_srcptr y, mpc_rnd_t rnd)
{
if (x_real && mpfr_zero_p (mpc_realref(x)))
{
- /* we define 0^0 to be (1, -sign(Im(y))*0) since the real part is
+ /* we define 0^0 to be (1, +0) since the real part is
coherent with MPFR where 0^0 gives 1, and the sign of the
- imaginary part is the most frequent one obtained for random
- tiny x and y, for example with the following Sage program:
- D = dict()
- for sa in [-1,1]:
- for sb in [-1,1]:
- for sc in [-1,1]:
- for sd in [-1,1]:
- D[(sa,sb,sc,sd)] = [0,0]
- def tiny():
- return (random() - 0.5) * 1e-3
- for n in range(10^4):
- a = tiny()
- b = tiny()
- c = tiny()
- d = tiny()
- x = a+I*b
- y = c+I*d
- z = x^y
- t = sign(a),sign(b),sign(c),sign(d)
- if sign(z.imag()) == 1:
- D[t] = [D[t][0],D[t][1]+1]
- else:
- D[t] = [D[t][0]+1,D[t][1]] */
- mpfr_set_ui (mpc_realref(z), 1, GMP_RNDZ);
- mpfr_set_zero (mpc_imagref(z),
- mpfr_signbit (mpc_imagref(y)) ? 1 : -1);
+ imaginary part cannot be determined */
+ mpc_set_ui_ui (z, 1, 0, MPC_RNDNN);
return 0;
}
else /* x^0 = 1 +/- i*0 even for x=NaN see algorithms.tex for the