1/* mpfr_set_machine_rnd_mode -- set the rounding mode for machine floats 2 3Copyright 1999, 2001-2002, 2006-2023 Free Software Foundation, Inc. 4Contributed by the AriC and Caramba projects, INRIA. 5 6This file is part of the GNU MPFR Library. 7 8The GNU MPFR Library is free software; you can redistribute it and/or modify 9it under the terms of the GNU Lesser General Public License as published by 10the Free Software Foundation; either version 3 of the License, or (at your 11option) any later version. 12 13The GNU MPFR Library is distributed in the hope that it will be useful, but 14WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 15or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 16License for more details. 17 18You should have received a copy of the GNU Lesser General Public License 19along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see 20https://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc., 2151 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */ 22 23#include "mpfr-test.h" 24 25/* It is important to test each FE_* macro -- see the ISO C99 standard. 26 For instance, with some ARM implementations, only FE_TONEAREST may 27 be defined. */ 28 29/* sets the machine rounding mode to the value rnd_mode */ 30int 31mpfr_set_machine_rnd_mode (mpfr_rnd_t rnd_mode) 32{ 33 switch (rnd_mode) 34 { 35 case MPFR_RNDN: 36 return 37#if defined (MPFR_HAVE_FESETROUND) && defined (FE_TONEAREST) 38 fesetround(FE_TONEAREST) 39#else 40 -1 41#endif 42 ; 43 case MPFR_RNDZ: 44 return 45#if defined (MPFR_HAVE_FESETROUND) && defined (FE_TOWARDZERO) 46 fesetround(FE_TOWARDZERO) 47#else 48 -1 49#endif 50 ; 51 case MPFR_RNDU: 52 return 53#if defined (MPFR_HAVE_FESETROUND) && defined (FE_UPWARD) 54 fesetround(FE_UPWARD) 55#else 56 -1 57#endif 58 ; 59 case MPFR_RNDD: 60 return 61#if defined (MPFR_HAVE_FESETROUND) && defined (FE_DOWNWARD) 62 fesetround(FE_DOWNWARD) 63#else 64 -1 65#endif 66 ; 67 default: 68 return -1; 69 } 70} 71