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