1 /* print_parameter.c -- Helper function for parameter printing.
2
3 Copyright (C) 2012, 2013, 2014 INRIA
4
5 This file is part of GNU MPC.
6
7 GNU MPC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11
12 GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
15 more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with this program. If not, see http://www.gnu.org/licenses/ .
19 */
20
21 #include "mpc-tests.h"
22
23 static const char *mpfr_rnd_mode [] =
24 { "MPFR_RNDN", "MPFR_RNDZ", "MPFR_RNDU", "MPFR_RNDD", "MPFR_RNDA" };
25 const 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
55 void
print_parameter(mpc_fun_param_t * params,int index)56 print_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