1/* mpfr_add_si -- add a floating-point number with a machine integer 2 mpfr_sub_si -- sub a floating-point number with a machine integer 3 mpfr_si_sub -- sub a machine number with a floating-point number 4 5Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. 6Contributed by the AriC and Caramel projects, INRIA. 7 8This file is part of the GNU MPFR Library. 9 10The GNU MPFR Library is free software; you can redistribute it and/or modify 11it under the terms of the GNU Lesser General Public License as published by 12the Free Software Foundation; either version 3 of the License, or (at your 13option) any later version. 14 15The GNU MPFR Library is distributed in the hope that it will be useful, but 16WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 17or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 18License for more details. 19 20You should have received a copy of the GNU Lesser General Public License 21along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see 22http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc., 2351 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ 24 25#include "mpfr-impl.h" 26 27int 28mpfr_add_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode) 29{ 30 if (u >= 0) 31 return mpfr_add_ui (y, x, u, rnd_mode); 32 else 33 return mpfr_sub_ui (y, x, -u, rnd_mode); 34} 35 36int 37mpfr_sub_si (mpfr_ptr y, mpfr_srcptr x, long int u, mpfr_rnd_t rnd_mode) 38{ 39 if (u >= 0) 40 return mpfr_sub_ui (y, x, u, rnd_mode); 41 else 42 return mpfr_add_ui (y, x, -u, rnd_mode); 43} 44 45int 46mpfr_si_sub (mpfr_ptr y, long int u, mpfr_srcptr x, mpfr_rnd_t rnd_mode) 47{ 48 if (u >= 0) 49 return mpfr_ui_sub (y, u, x, rnd_mode); 50 else 51 { 52 int res = -mpfr_add_ui (y, x, -u, MPFR_INVERT_RND (rnd_mode)); 53 MPFR_CHANGE_SIGN (y); 54 return res; 55 } 56} 57 58