summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-03-07 10:15:17 +0000
committerenge <enge@211d60ee-9f03-0410-a15a-8952a2c7a4e4>2012-03-07 10:15:17 +0000
commitaeb0d53641d56926616f5bee59abf7337e44bddf (patch)
tree43eebd1eb0e4abe7deef2953f0145fa9162aac5d
parenta14bf1da6eaa0c1b0346557169168d308c095a04 (diff)
downloadmpc-aeb0d53641d56926616f5bee59abf7337e44bddf.tar.gz
sqr.c: small changes to drop goto
git-svn-id: svn://scm.gforge.inria.fr/svn/mpc/trunk@1141 211d60ee-9f03-0410-a15a-8952a2c7a4e4
-rw-r--r--src/sqr.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/src/sqr.c b/src/sqr.c
index 5b4b182..f71a6ad 100644
--- a/src/sqr.c
+++ b/src/sqr.c
@@ -287,25 +287,29 @@ mpc_sqr (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd)
and we round up, an overflow will give +Inf, but an underflow
will give 0.5*2^emin */
if (mpfr_get_exp (u) == emin) /* underflow */
- {
+ {
inex_re = mpfr_fsss (rop->re, x, op->im, MPC_RND_RE (rnd));
- goto end_of_real_part;
- }
+ ok = 1;
+ }
else if (mpfr_inf_p (u))
- {
+ {
/* let mpc_realref(rop) be a "correctly rounded overflow" */
- inex_re = mpfr_set_ui_2exp (mpc_realref (rop), 1, emax, MPC_RND_RE (rnd));
- break;
- }
- ok = (!inexact) | mpfr_can_round (u, prec - 3, GMP_RNDU, GMP_RNDZ,
- MPC_PREC_RE (rop) + (MPC_RND_RE (rnd) == GMP_RNDN));
- if (ok)
+ inex_re = mpfr_set_ui_2exp (mpc_realref (rop), 1, emax,
+ MPC_RND_RE (rnd));
+ ok = 1;
+ }
+ else {
+ ok = (!inexact) | mpfr_can_round (u, prec - 3,
+ GMP_RNDU, GMP_RNDZ,
+ MPC_PREC_RE (rop) + (MPC_RND_RE (rnd) == GMP_RNDN));
+ if (ok)
{
- inex_re = mpfr_set (mpc_realref (rop), u, MPC_RND_RE (rnd));
- if (inex_re == 0)
- /* remember that u was already rounded */
- inex_re = inexact;
+ inex_re = mpfr_set (mpc_realref (rop), u, MPC_RND_RE (rnd));
+ if (inex_re == 0)
+ /* remember that u was already rounded */
+ inex_re = inexact;
}
+ }
}
else
{
@@ -351,7 +355,6 @@ mpc_sqr (mpc_ptr rop, mpc_srcptr op, mpc_rnd_t rnd)
}
while (!ok);
- end_of_real_part:
mpfr_clear (u);
mpfr_clear (v);
}