print_parameter.c revision 1.1.1.2
1/* print_parameter.c -- Helper function for parameter printing.
2
3Copyright (C) 2012, 2013, 2014 INRIA
4
5This file is part of GNU MPC.
6
7GNU MPC is free software; you can redistribute it and/or modify it under
8the terms of the GNU Lesser General Public License as published by the
9Free Software Foundation; either version 3 of the License, or (at your
10option) any later version.
11
12GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
15more details.
16
17You should have received a copy of the GNU Lesser General Public License
18along with this program. If not, see http://www.gnu.org/licenses/ .
19*/
20
21#include "mpc-tests.h"
22
23static const char *mpfr_rnd_mode [] =
24  { "MPFR_RNDN", "MPFR_RNDZ", "MPFR_RNDU", "MPFR_RNDD", "MPFR_RNDA" };
25const char *mpc_rnd_mode[] =
26  { "MPC_RNDNN", "MPC_RNDZN", "MPC_RNDUN", "MPC_RNDDN", "MPC_RNDAN",
27    "undefined", "undefined", "undefined", "undefined", "undefined",
28    "undefined", "undefined", "undefined", "undefined", "undefined",
29    "undefined",
30    "MPC_RNDNZ", "MPC_RNDZZ", "MPC_RNDUZ", "MPC_RNDDZ", "MPC_RNDAZ",
31    "undefined", "undefined", "undefined", "undefined", "undefined",
32    "undefined", "undefined", "undefined", "undefined", "undefined",
33    "undefined",
34    "MPC_RNDNU", "MPC_RNDZU", "MPC_RNDUU", "MPC_RNDDU", "MPC_RNDAU",
35    "undefined", "undefined", "undefined", "undefined", "undefined",
36    "undefined", "undefined", "undefined", "undefined", "undefined",
37    "undefined",
38    "MPC_RNDND", "MPC_RNDZD", "MPC_RNDUD", "MPC_RNDDD", "MPC_RNDAD",
39    "undefined", "undefined", "undefined", "undefined", "undefined",
40    "undefined", "undefined", "undefined", "undefined", "undefined",
41    "undefined",
42    "MPC_RNDNA", "MPC_RNDZA", "MPC_RNDUA", "MPC_RNDDA", "MPC_RNDAA",
43    "undefined", "undefined", "undefined", "undefined", "undefined",
44    "undefined", "undefined", "undefined", "undefined", "undefined",
45    "undefined"
46  };
47  /* needed in tio_str.c and tstrtoc.c, so not static */
48
49
50#define MPFR_INEX_STR(inex)                     \
51  (inex) == TERNARY_NOT_CHECKED ? "?"           \
52    : (inex) == +1 ? "+1"                       \
53    : (inex) == -1 ? "-1" : "0"
54
55void
56print_parameter (mpc_fun_param_t* params, int index)
57{
58  switch (params->T[index])
59    {
60    case NATIVE_INT:
61      printf ("= %d\n", params->P[index].i);
62      break;
63
64    case NATIVE_UL:
65      printf ("= %lu\n", params->P[index].ui);
66      break;
67
68    case NATIVE_L:
69      printf ("= %ld\n", params->P[index].si);
70      break;
71
72    case NATIVE_D:
73      printf ("= %e\n", params->P[index].d);
74      break;
75
76    case GMP_Z:
77      gmp_printf ("= %Zd\n", params->P[index].mpz);
78      break;
79    case GMP_Q:
80      gmp_printf ("= %Qd\n", params->P[index].mpq);
81      break;
82    case GMP_F:
83      gmp_printf ("= %Fe\n", params->P[index].mpf);
84      break;
85
86    case MPFR_INEX:
87      printf (" ternary value = %s\n",
88              MPFR_INEX_STR (params->P[index].mpfr_inex));
89      break;
90
91    case MPFR:
92      printf ("[%lu]=",
93              (unsigned long int) mpfr_get_prec (params->P[index].mpfr));
94      mpfr_out_str (stdout, 2, 0, params->P[index].mpfr, GMP_RNDN);
95      printf ("\n");
96      break;
97
98    case MPC_INEX:
99      if (index >= params->nbout + params->nbin)
100        printf (" ternary value = (%s, %s)\n",
101                MPFR_INEX_STR (params->P[index].mpc_inex_data.real),
102                MPFR_INEX_STR (params->P[index].mpc_inex_data.imag));
103      else
104        printf (" ternary value = %s\n", MPC_INEX_STR (params->P[index].mpc_inex));
105      break;
106
107    case MPC:
108      printf ("[%lu,%lu]=",
109              (unsigned long int) MPC_PREC_RE (params->P[index].mpc),
110              (unsigned long int) MPC_PREC_IM (params->P[index].mpc));
111      mpc_out_str (stdout, 2, 0, params->P[index].mpc, MPC_RNDNN);
112      printf ("\n");
113      break;
114
115    case MPFR_RND:
116      printf ("(rounding mode): %s\n",
117              mpfr_rnd_mode[params->P[index].mpfr_rnd]);
118      break;
119
120    case MPC_RND:
121      printf ("(rounding mode): %s\n",
122              mpc_rnd_mode[params->P[index].mpc_rnd]);
123      break;
124
125    case MPCC_INEX:
126      printf (" double ternary value = %s, %s\n",
127              MPC_INEX_STR (MPC_INEX1 (params->P[index].mpcc_inex)),
128              MPC_INEX_STR (MPC_INEX2 (params->P[index].mpcc_inex))
129              );
130      break;
131
132    default:
133      fprintf (stderr, "print_parameter: unsupported type.\n");
134      exit (1);
135    }
136}
137