14a238c70SJohn Marino /* mpfr_add_si -- add a floating-point number with a machine integer
24a238c70SJohn Marino mpfr_sub_si -- sub a floating-point number with a machine integer
34a238c70SJohn Marino mpfr_si_sub -- sub a machine number with a floating-point number
44a238c70SJohn Marino
5*ab6d115fSJohn Marino Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
6*ab6d115fSJohn Marino Contributed by the AriC and Caramel projects, INRIA.
74a238c70SJohn Marino
84a238c70SJohn Marino This file is part of the GNU MPFR Library.
94a238c70SJohn Marino
104a238c70SJohn Marino The GNU MPFR Library is free software; you can redistribute it and/or modify
114a238c70SJohn Marino it under the terms of the GNU Lesser General Public License as published by
124a238c70SJohn Marino the Free Software Foundation; either version 3 of the License, or (at your
134a238c70SJohn Marino option) any later version.
144a238c70SJohn Marino
154a238c70SJohn Marino The GNU MPFR Library is distributed in the hope that it will be useful, but
164a238c70SJohn Marino WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
174a238c70SJohn Marino or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
184a238c70SJohn Marino License for more details.
194a238c70SJohn Marino
204a238c70SJohn Marino You should have received a copy of the GNU Lesser General Public License
214a238c70SJohn Marino along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
224a238c70SJohn Marino http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
234a238c70SJohn Marino 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
244a238c70SJohn Marino
254a238c70SJohn Marino #include "mpfr-impl.h"
264a238c70SJohn Marino
274a238c70SJohn Marino int
mpfr_add_si(mpfr_ptr y,mpfr_srcptr x,long int u,mpfr_rnd_t rnd_mode)284a238c70SJohn Marino mpfr_add_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode)
294a238c70SJohn Marino {
304a238c70SJohn Marino if (u >= 0)
314a238c70SJohn Marino return mpfr_add_ui (y, x, u, rnd_mode);
324a238c70SJohn Marino else
334a238c70SJohn Marino return mpfr_sub_ui (y, x, -u, rnd_mode);
344a238c70SJohn Marino }
354a238c70SJohn Marino
364a238c70SJohn Marino int
mpfr_sub_si(mpfr_ptr y,mpfr_srcptr x,long int u,mpfr_rnd_t rnd_mode)374a238c70SJohn Marino mpfr_sub_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode)
384a238c70SJohn Marino {
394a238c70SJohn Marino if (u >= 0)
404a238c70SJohn Marino return mpfr_sub_ui (y, x, u, rnd_mode);
414a238c70SJohn Marino else
424a238c70SJohn Marino return mpfr_add_ui (y, x, -u, rnd_mode);
434a238c70SJohn Marino }
444a238c70SJohn Marino
454a238c70SJohn Marino int
mpfr_si_sub(mpfr_ptr y,long int u,mpfr_srcptr x,mpfr_rnd_t rnd_mode)464a238c70SJohn Marino mpfr_si_sub (mpfr_ptr y, long int u, mpfr_srcptr x, mpfr_rnd_t rnd_mode)
474a238c70SJohn Marino {
484a238c70SJohn Marino if (u >= 0)
494a238c70SJohn Marino return mpfr_ui_sub (y, u, x, rnd_mode);
504a238c70SJohn Marino else
514a238c70SJohn Marino {
524a238c70SJohn Marino int res = -mpfr_add_ui (y, x, -u, MPFR_INVERT_RND (rnd_mode));
534a238c70SJohn Marino MPFR_CHANGE_SIGN (y);
544a238c70SJohn Marino return res;
554a238c70SJohn Marino }
564a238c70SJohn Marino }
574a238c70SJohn Marino
58