summaryrefslogtreecommitdiff
path: root/pow_si.c
diff options
context:
space:
mode:
authorvlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2005-08-18 16:35:19 +0000
committervlefevre <vlefevre@280ebfd0-de03-0410-8827-d642c229c3f4>2005-08-18 16:35:19 +0000
commitbab5aab404897a12fe1c87734ebf2aa270b9b73b (patch)
tree73ab96f558e7e0b4ef371902ead983189184a0f7 /pow_si.c
parent8328a51518450ad8ddb86e38e7952e28065ff22a (diff)
downloadmpfr-bab5aab404897a12fe1c87734ebf2aa270b9b73b.tar.gz
Converted tabs to spaces with expand.
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@3725 280ebfd0-de03-0410-8827-d642c229c3f4
Diffstat (limited to 'pow_si.c')
-rw-r--r--pow_si.c118
1 files changed, 59 insertions, 59 deletions
diff --git a/pow_si.c b/pow_si.c
index 6eecdb796..35b6db222 100644
--- a/pow_si.c
+++ b/pow_si.c
@@ -36,32 +36,32 @@ mpfr_pow_si (mpfr_ptr y, mpfr_srcptr x, long int n, mp_rnd_t rnd_mode)
else
{
if (MPFR_UNLIKELY (MPFR_IS_SINGULAR (x)))
- {
- if (MPFR_IS_NAN (x))
- {
- MPFR_SET_NAN (y);
- MPFR_RET_NAN;
- }
- else if (MPFR_IS_INF (x))
- {
- MPFR_SET_ZERO (y);
- if (MPFR_IS_POS (x) || ((unsigned) n & 1) == 0)
- MPFR_SET_POS (y);
- else
- MPFR_SET_NEG (y);
- MPFR_RET (0);
- }
- else /* x is zero */
- {
+ {
+ if (MPFR_IS_NAN (x))
+ {
+ MPFR_SET_NAN (y);
+ MPFR_RET_NAN;
+ }
+ else if (MPFR_IS_INF (x))
+ {
+ MPFR_SET_ZERO (y);
+ if (MPFR_IS_POS (x) || ((unsigned) n & 1) == 0)
+ MPFR_SET_POS (y);
+ else
+ MPFR_SET_NEG (y);
+ MPFR_RET (0);
+ }
+ else /* x is zero */
+ {
MPFR_ASSERTD (MPFR_IS_ZERO (x));
- MPFR_SET_INF(y);
- if (MPFR_IS_POS (x) || ((unsigned) n & 1) == 0)
- MPFR_SET_POS (y);
- else
- MPFR_SET_NEG (y);
- MPFR_RET(0);
- }
- }
+ MPFR_SET_INF(y);
+ if (MPFR_IS_POS (x) || ((unsigned) n & 1) == 0)
+ MPFR_SET_POS (y);
+ else
+ MPFR_SET_NEG (y);
+ MPFR_RET(0);
+ }
+ }
MPFR_CLEAR_FLAGS (y);
/* detect exact powers: x^(-n) is exact iff x is a power of 2 */
@@ -70,16 +70,16 @@ mpfr_pow_si (mpfr_ptr y, mpfr_srcptr x, long int n, mp_rnd_t rnd_mode)
mp_exp_t expx = MPFR_EXP (x); /* warning: x and y may be the same
variable */
mpfr_set_si (y, (n % 2) ? MPFR_INT_SIGN(x) : 1, rnd_mode);
- expx --;
- MPFR_ASSERTD (n < 0);
- /* Warning n*expx may overflow!
- Some systems abort with LONG_MIN / 1 or LONG_MIN/-1*/
- if (n != -1 && expx > 0 && -expx < MPFR_EXP_MIN / (-n))
- MPFR_EXP (y) = MPFR_EMIN_MIN - 1; /* Underflow */
- else if (n != -1 && expx < 0 && -expx > MPFR_EXP_MAX / (-n))
- MPFR_EXP (y) = MPFR_EMAX_MAX + 1; /* Overflow */
+ expx --;
+ MPFR_ASSERTD (n < 0);
+ /* Warning n*expx may overflow!
+ Some systems abort with LONG_MIN / 1 or LONG_MIN/-1*/
+ if (n != -1 && expx > 0 && -expx < MPFR_EXP_MIN / (-n))
+ MPFR_EXP (y) = MPFR_EMIN_MIN - 1; /* Underflow */
+ else if (n != -1 && expx < 0 && -expx > MPFR_EXP_MAX / (-n))
+ MPFR_EXP (y) = MPFR_EMAX_MAX + 1; /* Overflow */
else
- MPFR_EXP (y) += n * expx;
+ MPFR_EXP (y) += n * expx;
return mpfr_check_range (y, 0, rnd_mode);
}
@@ -94,42 +94,42 @@ mpfr_pow_si (mpfr_ptr y, mpfr_srcptr x, long int n, mp_rnd_t rnd_mode)
mp_prec_t Nt; /* working precision */
mp_exp_t err; /* error */
int inexact;
- MPFR_SAVE_EXPO_DECL (expo);
- MPFR_ZIV_DECL (loop);
+ MPFR_SAVE_EXPO_DECL (expo);
+ MPFR_ZIV_DECL (loop);
/* compute the precision of intermediary variable */
/* the optimal number of bits : see algorithms.tex */
Nt = Ny + 3 + MPFR_INT_CEIL_LOG2 (Ny);
- MPFR_SAVE_EXPO_MARK (expo);
+ MPFR_SAVE_EXPO_MARK (expo);
- /* initialise of intermediary variable */
+ /* initialise of intermediary variable */
mpfr_init2 (t, Nt);
-
- MPFR_ZIV_INIT (loop, Nt);
+
+ MPFR_ZIV_INIT (loop, Nt);
for (;;)
- {
- /* compute 1/(x^n) n>0*/
- mpfr_pow_ui (t, x, (unsigned long int) n, GMP_RNDN);
- inexact = MPFR_IS_ZERO (t) || MPFR_IS_INF (t);
- mpfr_ui_div (t, 1, t, GMP_RNDN);
- inexact = inexact || MPFR_IS_ZERO (t) || MPFR_IS_INF (t);
-
- /* error estimate -- see pow function in algorithms.ps */
- err = Nt - 3;
- if (MPFR_LIKELY (inexact != 0
- || MPFR_CAN_ROUND (t, err, Ny, rnd_mode)))
- break;
-
- /* actualisation of the precision */
- Nt += BITS_PER_MP_LIMB;
- mpfr_set_prec (t, Nt);
- }
- MPFR_ZIV_FREE (loop);
+ {
+ /* compute 1/(x^n) n>0*/
+ mpfr_pow_ui (t, x, (unsigned long int) n, GMP_RNDN);
+ inexact = MPFR_IS_ZERO (t) || MPFR_IS_INF (t);
+ mpfr_ui_div (t, 1, t, GMP_RNDN);
+ inexact = inexact || MPFR_IS_ZERO (t) || MPFR_IS_INF (t);
+
+ /* error estimate -- see pow function in algorithms.ps */
+ err = Nt - 3;
+ if (MPFR_LIKELY (inexact != 0
+ || MPFR_CAN_ROUND (t, err, Ny, rnd_mode)))
+ break;
+
+ /* actualisation of the precision */
+ Nt += BITS_PER_MP_LIMB;
+ mpfr_set_prec (t, Nt);
+ }
+ MPFR_ZIV_FREE (loop);
inexact = mpfr_set (y, t, rnd_mode);
mpfr_clear (t);
- MPFR_SAVE_EXPO_FREE (expo);
+ MPFR_SAVE_EXPO_FREE (expo);
return mpfr_check_range (y, inexact, rnd_mode);
}
}