diff -Naur mpfr-2.1.0-p6/sum.c mpfr-2.1.0-p7/sum.c --- mpfr-2.1.0-p6/sum.c 2004-02-24 13:23:35.000000000 +0000 +++ mpfr-2.1.0-p7/sum.c 2005-01-23 23:19:18.010431168 +0000 @@ -1,6 +1,6 @@ /* Sum -- efficiently sum a list of floating-point numbers -Copyright 2004 Free Software Foundation, Inc. +Copyright 2004, 2005 Free Software Foundation, Inc. This file is part of the MPFR Library. @@ -169,17 +169,18 @@ { unsigned long i; mpfr_t sum; - int error_trap = 0; + int error_trap; + + if (MPFR_UNLIKELY (n == 1)) + return mpfr_set (ret, tab[0], GMP_RNDN); mpfr_init2 (sum, F); - mpfr_set (sum, tab[0], GMP_RNDN); + error_trap = mpfr_set (sum, tab[0], GMP_RNDN); for (i = 1; i < n - 1; i++) - { - error_trap |= mpfr_add (sum, sum, tab[i], GMP_RNDN); - } - + error_trap |= mpfr_add (sum, sum, tab[i], GMP_RNDN); error_trap |= mpfr_add (ret, sum, tab[n - 1], GMP_RNDN); + mpfr_clear (sum); return error_trap; } @@ -201,6 +202,11 @@ TMP_DECL(marker); TMP_MARK(marker); + if (MPFR_UNLIKELY (n == 0)) { + MPFR_SET_ZERO (ret); + MPFR_SET_POS (ret); + return 0; + } perm = (mpfr_srcptr *) TMP_ALLOC(n * sizeof(mpfr_srcptr));