Home | History | Annotate | Line # | Download | only in src
      1 /* mpc_sum -- Add an array of complex numbers.
      2 
      3 Copyright (C) 2018 INRIA
      4 
      5 This file is part of GNU MPC.
      6 
      7 GNU MPC is free software; you can redistribute it and/or modify it under
      8 the terms of the GNU Lesser General Public License as published by the
      9 Free Software Foundation; either version 3 of the License, or (at your
     10 option) any later version.
     11 
     12 GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
     13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
     15 more details.
     16 
     17 You should have received a copy of the GNU Lesser General Public License
     18 along with this program. If not, see http://www.gnu.org/licenses/ .
     19 */
     20 
     21 #include <stdio.h> /* for MPC_ASSERT */
     22 #include "mpc-impl.h"
     23 
     24 int
     25 mpc_sum (mpc_ptr sum, const mpc_ptr *z, unsigned long n, mpc_rnd_t rnd)
     26 {
     27   int inex_re, inex_im;
     28   mpfr_ptr *t;
     29   unsigned long i;
     30 
     31   t = (mpfr_ptr *) malloc (n * sizeof(mpfr_t));
     32   /* warning: when n=0, malloc() might return NULL (e.g., gcc119) */
     33   MPC_ASSERT(n == 0 || t != NULL);
     34   for (i = 0; i < n; i++)
     35     t[i] = mpc_realref (z[i]);
     36   inex_re = mpfr_sum (mpc_realref (sum), t, n, MPC_RND_RE (rnd));
     37   for (i = 0; i < n; i++)
     38     t[i] = mpc_imagref (z[i]);
     39   inex_im = mpfr_sum (mpc_imagref (sum), t, n, MPC_RND_IM (rnd));
     40   free (t);
     41 
     42   return MPC_INEX(inex_re, inex_im);
     43 }
     44