tget_str.c revision 1.1.1.3 1 1.1 mrg /* Test file for mpfr_get_str.
2 1.1 mrg
3 1.1.1.3 mrg Copyright 1999, 2001-2016 Free Software Foundation, Inc.
4 1.1.1.3 mrg Contributed by the AriC and Caramba projects, INRIA.
5 1.1 mrg
6 1.1 mrg This file is part of the GNU MPFR Library.
7 1.1 mrg
8 1.1 mrg The GNU MPFR Library is free software; you can redistribute it and/or modify
9 1.1 mrg it under the terms of the GNU Lesser General Public License as published by
10 1.1 mrg the Free Software Foundation; either version 3 of the License, or (at your
11 1.1 mrg option) any later version.
12 1.1 mrg
13 1.1 mrg The GNU MPFR Library is distributed in the hope that it will be useful, but
14 1.1 mrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1 mrg or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 1.1 mrg License for more details.
17 1.1 mrg
18 1.1 mrg You should have received a copy of the GNU Lesser General Public License
19 1.1 mrg along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
20 1.1 mrg http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
21 1.1 mrg 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
22 1.1 mrg
23 1.1 mrg #include <stdlib.h>
24 1.1 mrg
25 1.1 mrg #include "mpfr-test.h"
26 1.1 mrg
27 1.1 mrg static void
28 1.1.1.2 mrg check3 (const char *d, mpfr_rnd_t rnd, const char *res)
29 1.1 mrg {
30 1.1 mrg mpfr_t x;
31 1.1 mrg char *str;
32 1.1 mrg mpfr_exp_t e;
33 1.1 mrg
34 1.1 mrg mpfr_init2 (x, 53);
35 1.1 mrg mpfr_set_str (x, d, 10, rnd);
36 1.1 mrg str = mpfr_get_str (NULL, &e, 10, 5, x, rnd);
37 1.1 mrg if (strcmp (str, res))
38 1.1 mrg {
39 1.1 mrg printf ("Error in mpfr_get_str for x=%s\n", d);
40 1.1 mrg printf ("got %s instead of %s\n", str, res);
41 1.1 mrg exit (1);
42 1.1 mrg }
43 1.1 mrg mpfr_clear (x);
44 1.1 mrg mpfr_free_str (str);
45 1.1 mrg }
46 1.1 mrg
47 1.1 mrg static void
48 1.1 mrg check_small (void)
49 1.1 mrg {
50 1.1 mrg mpfr_t x;
51 1.1 mrg char *s;
52 1.1 mrg mpfr_exp_t e;
53 1.1 mrg mpfr_prec_t p;
54 1.1 mrg
55 1.1 mrg mpfr_init (x);
56 1.1 mrg
57 1.1 mrg mpfr_set_prec (x, 20);
58 1.1 mrg mpfr_set_ui (x, 2, MPFR_RNDN);
59 1.1 mrg mpfr_nexttozero (x);
60 1.1 mrg s = mpfr_get_str (NULL, &e, 4, 2, x, MPFR_RNDU);
61 1.1 mrg if (strcmp (s, "20") || (e != 1))
62 1.1 mrg {
63 1.1 mrg printf ("Error in mpfr_get_str: 2- rounded up with 2 digits"
64 1.1 mrg " in base 4\n");
65 1.1 mrg exit (1);
66 1.1 mrg }
67 1.1 mrg mpfr_free_str (s);
68 1.1 mrg
69 1.1 mrg /* check n_digits=0 */
70 1.1 mrg mpfr_set_prec (x, 5);
71 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
72 1.1 mrg s = mpfr_get_str (NULL, &e, 3, 0, x, MPFR_RNDN);
73 1.1 mrg mpfr_free_str (s);
74 1.1 mrg s = mpfr_get_str (NULL, &e, 36, 0, x, MPFR_RNDN);
75 1.1 mrg mpfr_free_str (s);
76 1.1 mrg s = mpfr_get_str (NULL, &e, 62, 0, x, MPFR_RNDN);
77 1.1 mrg mpfr_free_str (s);
78 1.1 mrg
79 1.1 mrg mpfr_set_prec (x, 64);
80 1.1 mrg mpfr_set_si (x, -1, MPFR_RNDN);
81 1.1 mrg mpfr_div_2exp (x, x, 63, MPFR_RNDN); /* x = -2^(-63) */
82 1.1 mrg mpfr_add_ui (x, x, 1, MPFR_RNDN); /* x = 1 - 2^(-63) */
83 1.1 mrg mpfr_mul_2exp (x, x, 32, MPFR_RNDN); /* x = 2^32 - 2^(-31) */
84 1.1 mrg s = mpfr_get_str (NULL, &e, 3, 21, x, MPFR_RNDU);
85 1.1 mrg if (strcmp (s, "102002022201221111211") || (e != 21))
86 1.1 mrg {
87 1.1 mrg printf ("Error in mpfr_get_str: 2^32-2^(-31) rounded up with"
88 1.1 mrg " 21 digits in base 3\n");
89 1.1 mrg exit (1);
90 1.1 mrg }
91 1.1 mrg mpfr_free_str (s);
92 1.1 mrg s = mpfr_get_str (NULL, &e, 3, 20, x, MPFR_RNDU);
93 1.1 mrg if (strcmp (s, "10200202220122111122") || (e != 21))
94 1.1 mrg {
95 1.1 mrg printf ("Error in mpfr_get_str: 2^32-2^(-31) rounded up with"
96 1.1 mrg " 20 digits in base 3\n");
97 1.1 mrg exit (1);
98 1.1 mrg }
99 1.1 mrg mpfr_free_str (s);
100 1.1 mrg
101 1.1 mrg /* check corner case ret!=0, j0!=0 in mpfr_get_str_aux */
102 1.1 mrg mpfr_set_prec (x, 100);
103 1.1 mrg mpfr_set_str_binary (x, "0.1001011111010001101110010101010101111001010111111101101101100110100011110110000101110110001011110000E-9");
104 1.1 mrg s = mpfr_get_str (NULL, &e, 3, 2, x, MPFR_RNDU);
105 1.1 mrg if (strcmp (s, "22") || (e != -6))
106 1.1 mrg {
107 1.1 mrg printf ("Error in mpfr_get_str: 100-bit number rounded up with"
108 1.1 mrg " 2 digits in base 3\n");
109 1.1 mrg exit (1);
110 1.1 mrg }
111 1.1 mrg mpfr_free_str (s);
112 1.1 mrg
113 1.1 mrg /* check corner case exact=0 in mpfr_get_str_aux */
114 1.1 mrg mpfr_set_prec (x, 100);
115 1.1 mrg mpfr_set_str_binary (x, "0.1001001111101101111000101000110111111010101100000110010001111111011001101011101100001100110000000000E8");
116 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDZ);
117 1.1 mrg if (strcmp (s, "14") || (e != 3))
118 1.1 mrg {
119 1.1 mrg printf ("Error in mpfr_get_str: 100-bit number rounded to zero with"
120 1.1 mrg " 2 digits in base 10\n");
121 1.1 mrg exit (1);
122 1.1 mrg }
123 1.1 mrg mpfr_free_str (s);
124 1.1 mrg
125 1.1 mrg for (p=4; p<=200; p++)
126 1.1 mrg {
127 1.1 mrg mpfr_set_prec (x, p);
128 1.1 mrg mpfr_set_str (x, "6.5", 10, MPFR_RNDN);
129 1.1 mrg
130 1.1 mrg s = mpfr_get_str (NULL, &e, 6, 2, x, MPFR_RNDN);
131 1.1 mrg if (strcmp (s, "10") || (e != 2))
132 1.1 mrg {
133 1.1 mrg printf ("Error in mpfr_get_str: 6.5 rounded to nearest with"
134 1.1 mrg " 2 digits in base 6\n");
135 1.1 mrg exit (1);
136 1.1 mrg }
137 1.1 mrg mpfr_free_str (s);
138 1.1 mrg
139 1.1 mrg mpfr_nexttoinf (x);
140 1.1 mrg s = mpfr_get_str (NULL, &e, 6, 2, x, MPFR_RNDN);
141 1.1 mrg if (strcmp (s, "11") || (e != 2))
142 1.1 mrg {
143 1.1 mrg printf ("Error in mpfr_get_str: 6.5+ rounded to nearest with"
144 1.1 mrg " 2 digits in base 6\ngot %se%d instead of 11e2\n",
145 1.1 mrg s, (int) e);
146 1.1 mrg exit (1);
147 1.1 mrg }
148 1.1 mrg mpfr_free_str (s);
149 1.1 mrg
150 1.1 mrg mpfr_set_str (x, "6.5", 10, MPFR_RNDN);
151 1.1 mrg mpfr_nexttozero (x);
152 1.1 mrg s = mpfr_get_str (NULL, &e, 6, 2, x, MPFR_RNDN);
153 1.1 mrg if (strcmp (s, "10") || (e != 2))
154 1.1 mrg {
155 1.1 mrg printf ("Error in mpfr_get_str: 6.5- rounded to nearest with"
156 1.1 mrg " 2 digits in base 6\n");
157 1.1 mrg exit (1);
158 1.1 mrg }
159 1.1 mrg mpfr_free_str (s);
160 1.1 mrg }
161 1.1 mrg
162 1.1 mrg mpfr_set_prec (x, 3);
163 1.1 mrg mpfr_set_ui (x, 7, MPFR_RNDN);
164 1.1 mrg s = mpfr_get_str (NULL, &e, 2, 2, x, MPFR_RNDU);
165 1.1 mrg if (strcmp (s, "10") || (e != 4))
166 1.1 mrg {
167 1.1 mrg printf ("Error in mpfr_get_str: 7 rounded up with 2 bits should"
168 1.1 mrg " give 0.10e3 instead of 0.%s*2^%d\n", s, (int) e);
169 1.1 mrg exit (1);
170 1.1 mrg }
171 1.1 mrg mpfr_free_str (s);
172 1.1 mrg
173 1.1 mrg /* problem found by Fabrice Rouillier */
174 1.1 mrg mpfr_set_prec (x, 63);
175 1.1 mrg mpfr_set_str (x, "5e14", 10, MPFR_RNDN);
176 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 18, x, MPFR_RNDU);
177 1.1 mrg mpfr_free_str (s);
178 1.1 mrg
179 1.1 mrg /* bug found by Johan Vervloet */
180 1.1 mrg mpfr_set_prec (x, 6);
181 1.1 mrg mpfr_set_str (x, "688.0", 10, MPFR_RNDN);
182 1.1 mrg s = mpfr_get_str (NULL, &e, 2, 4, x, MPFR_RNDU);
183 1.1 mrg if (strcmp (s, "1011") || (e != 10))
184 1.1 mrg {
185 1.1 mrg printf ("Error in mpfr_get_str: 688 printed up to 4 bits should"
186 1.1 mrg " give 1.011e9\ninstead of ");
187 1.1 mrg mpfr_out_str (stdout, 2, 4, x, MPFR_RNDU);
188 1.1 mrg puts ("");
189 1.1 mrg exit (1);
190 1.1 mrg }
191 1.1 mrg mpfr_free_str (s);
192 1.1 mrg
193 1.1 mrg mpfr_set_prec (x, 38);
194 1.1 mrg mpfr_set_str_binary (x, "1.0001110111110100011010100010010100110e-6");
195 1.1 mrg s = mpfr_get_str (NULL, &e, 8, 10, x, MPFR_RNDU);
196 1.1 mrg if (strcmp (s, "1073721522") || (e != -1))
197 1.1 mrg {
198 1.1 mrg printf ("Error in mpfr_get_str (3): s=%s e=%d\n", s, (int) e);
199 1.1 mrg exit (1);
200 1.1 mrg }
201 1.1 mrg mpfr_free_str (s);
202 1.1 mrg
203 1.1 mrg mpfr_set_prec (x, 53);
204 1.1 mrg mpfr_set_str_binary (x, "0.11010111011101100010000100010101110001000000010111001E454");
205 1.1 mrg s = mpfr_get_str (NULL, &e, 19, 12, x, MPFR_RNDU);
206 1.1 mrg if (strcmp (s, "b1cgfa4gha0h") || (e != 107))
207 1.1 mrg {
208 1.1 mrg printf ("Error in mpfr_get_str (4): s=%s e=%d\n", s, (int) e);
209 1.1 mrg exit (1);
210 1.1 mrg }
211 1.1 mrg mpfr_free_str (s);
212 1.1 mrg
213 1.1 mrg mpfr_set_prec (x, 145);
214 1.1 mrg mpfr_set_str_binary (x, "-0.1000110011000001011000010101101010110110101100101110100011111100011110011001001001010000100001000011000011000000010111011001000111101001110100110e6");
215 1.1 mrg s = mpfr_get_str (NULL, &e, 4, 53, x, MPFR_RNDU);
216 1.1 mrg if (strcmp (s, "-20303001120111222312230232203330132121021100201003003") || (e != 3))
217 1.1 mrg {
218 1.1 mrg printf ("Error in mpfr_get_str (5): s=%s e=%d\n", s, (int) e);
219 1.1 mrg exit (1);
220 1.1 mrg }
221 1.1 mrg mpfr_free_str (s);
222 1.1 mrg
223 1.1 mrg mpfr_set_prec (x, 45);
224 1.1 mrg mpfr_set_str_binary (x, "-0.00100111010110010001011001110111010001010010010");
225 1.1 mrg s = mpfr_get_str (NULL, &e, 32, 9, x, MPFR_RNDN);
226 1.1 mrg if (strcmp (s, "-4tchctq54") || (e != 0))
227 1.1 mrg {
228 1.1 mrg printf ("Error in mpfr_get_str (6): s=%s e=%d\n", s, (int) e);
229 1.1 mrg exit (1);
230 1.1 mrg }
231 1.1 mrg mpfr_free_str (s);
232 1.1 mrg
233 1.1 mrg /* worst case found by Vincent Lefe`vre */
234 1.1 mrg mpfr_set_prec (x, 53);
235 1.1 mrg mpfr_set_str_binary (x, "10011110111100000000001011011110101100010000011011111E164");
236 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 17, x, MPFR_RNDN);
237 1.1 mrg if (strcmp (s, "13076622631878654") || (e != 66))
238 1.1 mrg {
239 1.1 mrg printf ("Error in mpfr_get_str (7): s=%s e=%d\n", s, (int) e);
240 1.1 mrg exit (1);
241 1.1 mrg }
242 1.1 mrg mpfr_free_str (s);
243 1.1 mrg mpfr_set_str_binary (x, "10000001001001001100011101010011011011111000011000100E93");
244 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDU);
245 1.1 mrg if (strcmp (s, "46") || e != 44)
246 1.1 mrg {
247 1.1 mrg printf ("Error in mpfr_get_str (8): s=%s e=%d\n", s, (int) e);
248 1.1 mrg exit (1);
249 1.1 mrg }
250 1.1 mrg mpfr_free_str (s);
251 1.1 mrg mpfr_set_str_binary (x, "10010001111100000111001111010101001010000010111010101E55");
252 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDN);
253 1.1 mrg if (strcmp (s, "19") || e != 33)
254 1.1 mrg {
255 1.1 mrg printf ("Error in mpfr_get_str (9): s=%s e=%d\n", s, (int) e);
256 1.1 mrg exit (1);
257 1.1 mrg }
258 1.1 mrg mpfr_free_str (s);
259 1.1 mrg mpfr_set_str_binary (x, "11011001010010111110010101101100111110111000010110110E44");
260 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 3, x, MPFR_RNDN);
261 1.1 mrg if (strcmp (s, "135") || e != 30)
262 1.1 mrg {
263 1.1 mrg printf ("Error in mpfr_get_str (10): s=%s e=%d\n", s, (int) e);
264 1.1 mrg exit (1);
265 1.1 mrg }
266 1.1 mrg mpfr_free_str (s);
267 1.1 mrg mpfr_set_str_binary (x, "11101111101000001011100001111000011111101111011001100E72");
268 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 4, x, MPFR_RNDN);
269 1.1 mrg if (strcmp (s, "3981") || e != 38)
270 1.1 mrg {
271 1.1 mrg printf ("Error in mpfr_get_str (11): s=%s e=%d\n", s, (int) e);
272 1.1 mrg exit (1);
273 1.1 mrg }
274 1.1 mrg mpfr_free_str (s);
275 1.1 mrg mpfr_set_str_binary (x, "10011001001100100010111100001101110101001001111110000E46");
276 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 5, x, MPFR_RNDN);
277 1.1 mrg if (strcmp (s, "37930") || e != 30)
278 1.1 mrg {
279 1.1 mrg printf ("Error in mpfr_get_str (12): s=%s e=%d\n", s, (int) e);
280 1.1 mrg exit (1);
281 1.1 mrg }
282 1.1 mrg mpfr_free_str (s);
283 1.1 mrg mpfr_set_str_binary (x, "10001100110111001011011110011011011101100011010001011E-72");
284 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 6, x, MPFR_RNDN);
285 1.1 mrg if (strcmp (s, "104950") || e != -5)
286 1.1 mrg {
287 1.1 mrg printf ("Error in mpfr_get_str (13): s=%s e=%d\n", s, (int) e);
288 1.1 mrg exit (1);
289 1.1 mrg }
290 1.1 mrg mpfr_free_str (s);
291 1.1 mrg
292 1.1 mrg mpfr_set_str_binary (x, "10100100001011001000011001101101000110100110000010111E89");
293 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 7, x, MPFR_RNDN);
294 1.1 mrg if (strcmp (s, "3575392") || e != 43)
295 1.1 mrg {
296 1.1 mrg printf ("Error in mpfr_get_str (14): s=%s e=%d\n", s, (int) e);
297 1.1 mrg exit (1);
298 1.1 mrg }
299 1.1 mrg mpfr_free_str (s);
300 1.1 mrg
301 1.1 mrg mpfr_set_str_binary (x, "11000011011110110010100110001010000001010011001011001E-73");
302 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 8, x, MPFR_RNDN);
303 1.1 mrg if (strcmp (s, "72822386") || e != -6)
304 1.1 mrg {
305 1.1 mrg printf ("Error in mpfr_get_str (15): s=%s e=%d\n", s, (int) e);
306 1.1 mrg exit (1);
307 1.1 mrg }
308 1.1 mrg mpfr_free_str (s);
309 1.1 mrg
310 1.1 mrg mpfr_set_str_binary (x, "10101010001101000111001100001000100011100010010001010E78");
311 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 9, x, MPFR_RNDN);
312 1.1 mrg if (strcmp (s, "180992873") || e != 40)
313 1.1 mrg {
314 1.1 mrg printf ("Error in mpfr_get_str (16): s=%s e=%d\n", s, (int) e);
315 1.1 mrg exit (1);
316 1.1 mrg }
317 1.1 mrg mpfr_free_str (s);
318 1.1 mrg
319 1.1 mrg mpfr_set_str_binary (x, "10110111001000100000001101111001100101101110011011101E91");
320 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 10, x, MPFR_RNDN);
321 1.1 mrg if (strcmp (s, "1595312255") || e != 44)
322 1.1 mrg {
323 1.1 mrg printf ("Error in mpfr_get_str (17): s=%s e=%d\n", s, (int) e);
324 1.1 mrg exit (1);
325 1.1 mrg }
326 1.1 mrg mpfr_free_str (s);
327 1.1 mrg mpfr_set_str_binary (x, "10011101010111101111000100111011101011110100110110101E93");
328 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 11, x, MPFR_RNDN);
329 1.1 mrg if (strcmp (s, "54835744350") || e != 44)
330 1.1 mrg {
331 1.1 mrg printf ("Error in mpfr_get_str (18): s=%s e=%d\n", s, (int) e);
332 1.1 mrg exit (1);
333 1.1 mrg }
334 1.1 mrg mpfr_free_str (s);
335 1.1 mrg mpfr_set_str_binary (x, "10011101010111101111000100111011101011110100110110101E92");
336 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 12, x, MPFR_RNDN);
337 1.1 mrg if (strcmp (s, "274178721752") || e != 44)
338 1.1 mrg {
339 1.1 mrg printf ("Error in mpfr_get_str (19): s=%s e=%d\n", s, (int) e);
340 1.1 mrg exit (1);
341 1.1 mrg }
342 1.1 mrg mpfr_free_str (s);
343 1.1 mrg mpfr_set_str_binary (x, "10011101010111101111000100111011101011110100110110101E91");
344 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 13, x, MPFR_RNDN);
345 1.1 mrg if (strcmp (s, "1370893608762") || e != 44)
346 1.1 mrg {
347 1.1 mrg printf ("Error in mpfr_get_str (20): s=%s e=%d\n", s, (int) e);
348 1.1 mrg exit (1);
349 1.1 mrg }
350 1.1 mrg mpfr_free_str (s);
351 1.1 mrg
352 1.1 mrg mpfr_set_str_binary (x, "10010011010110011100010010100101100011101000011111111E92");
353 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 14, x, MPFR_RNDN);
354 1.1 mrg if (strcmp (s, "25672105101864") || e != 44)
355 1.1 mrg {
356 1.1 mrg printf ("Error in mpfr_get_str (21): s=%s e=%d\n", s, (int) e);
357 1.1 mrg exit (1);
358 1.1 mrg }
359 1.1 mrg mpfr_free_str (s);
360 1.1 mrg
361 1.1 mrg mpfr_set_str_binary (x, "100110111110110001000101110100100101101000011111001E87");
362 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 15, x, MPFR_RNDN);
363 1.1 mrg if (strcmp (s, "212231308858721") || e != 42)
364 1.1 mrg {
365 1.1 mrg printf ("Error in mpfr_get_str (22): s=%s e=%d\n", s, (int) e);
366 1.1 mrg exit (1);
367 1.1 mrg }
368 1.1 mrg mpfr_free_str (s);
369 1.1 mrg mpfr_set_str_binary (x, "10111010110000111000101100101111001011011100101001111E-128");
370 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 15, x, MPFR_RNDN);
371 1.1 mrg if (strcmp (s, "193109287087290") || e != -22)
372 1.1 mrg {
373 1.1 mrg printf ("Error in mpfr_get_str (22b): s=%s e=%d\n", s, (int) e);
374 1.1 mrg exit (1);
375 1.1 mrg }
376 1.1 mrg mpfr_free_str (s);
377 1.1 mrg
378 1.1 mrg mpfr_set_str_binary (x, "10001101101011010001111110000111010111010000110101010E80");
379 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 16, x, MPFR_RNDN);
380 1.1 mrg if (strcmp (s, "6026241735727920") || e != 40)
381 1.1 mrg {
382 1.1 mrg printf ("Error in mpfr_get_str (23): s=%s e=%d\n", s, (int) e);
383 1.1 mrg exit (1);
384 1.1 mrg }
385 1.1 mrg mpfr_free_str (s);
386 1.1 mrg
387 1.1 mrg mpfr_set_str_binary (x, "100010001011101001110101000110011001001000110001001E-81");
388 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 17, x, MPFR_RNDN);
389 1.1 mrg if (strcmp (s, "49741483709103481") || e != -9)
390 1.1 mrg {
391 1.1 mrg printf ("Error in mpfr_get_str (24): s=%s e=%d\n", s, (int) e);
392 1.1 mrg exit (1);
393 1.1 mrg }
394 1.1 mrg mpfr_free_str (s);
395 1.1 mrg mpfr_set_str_binary (x, "11000100001001001110111010011001111001001010110101111E-101");
396 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 7, x, MPFR_RNDN);
397 1.1 mrg if (strcmp (s, "2722049") || e != -14)
398 1.1 mrg {
399 1.1 mrg printf ("Error in mpfr_get_str (25): s=%s e=%d\n", s, (int) e);
400 1.1 mrg exit (1);
401 1.1 mrg }
402 1.1 mrg mpfr_free_str (s);
403 1.1 mrg mpfr_set_str_binary (x, "11111001010011100101000001111111110001001001110110001E-135");
404 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 8, x, MPFR_RNDN);
405 1.1 mrg if (strcmp (s, "20138772") || e != -24)
406 1.1 mrg {
407 1.1 mrg printf ("Error in mpfr_get_str (26): s=%s e=%d\n", s, (int) e);
408 1.1 mrg exit (1);
409 1.1 mrg }
410 1.1 mrg mpfr_free_str (s);
411 1.1 mrg
412 1.1 mrg mpfr_set_str_binary (x, "11111001010011100101000001111111110001001001110110001E-136");
413 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 9, x, MPFR_RNDN);
414 1.1 mrg if (strcmp (s, "100693858") || e != -24)
415 1.1 mrg {
416 1.1 mrg printf ("Error in mpfr_get_str (27): s=%s e=%d\n", s, (int) e);
417 1.1 mrg exit (1);
418 1.1 mrg }
419 1.1 mrg mpfr_free_str (s);
420 1.1 mrg mpfr_set_str_binary (x, "10001000001110010110001011111011111011011010000110001E-110");
421 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 14, x, MPFR_RNDN);
422 1.1 mrg if (strcmp (s, "36923634350619") || e != -17)
423 1.1 mrg {
424 1.1 mrg printf ("Error in mpfr_get_str (28): s=%s e=%d\n", s, (int) e);
425 1.1 mrg exit (1);
426 1.1 mrg }
427 1.1 mrg mpfr_free_str (s);
428 1.1 mrg mpfr_set_str_binary (x, "11001100010111000111100010000110011101110001000101111E-87");
429 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 16, x, MPFR_RNDN);
430 1.1 mrg if (strcmp (s, "4646636036100804") || e != -10)
431 1.1 mrg {
432 1.1 mrg printf ("Error in mpfr_get_str (29): s=%s e=%d\n", s, (int) e);
433 1.1 mrg exit (1);
434 1.1 mrg }
435 1.1 mrg mpfr_free_str (s);
436 1.1 mrg mpfr_set_str_binary (x, "10011111001111110100001001010111111011010101111111000E-99");
437 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 17, x, MPFR_RNDN);
438 1.1 mrg if (strcmp (s, "88399901882446712") || e != -14)
439 1.1 mrg {
440 1.1 mrg printf ("Error in mpfr_get_str (30): s=%s e=%d\n", s, (int) e);
441 1.1 mrg exit (1);
442 1.1 mrg }
443 1.1 mrg mpfr_free_str (s);
444 1.1 mrg
445 1.1 mrg /* 8116315218207718*2^(-293) ~ 0.5100000000000000000015*10^(-72) */
446 1.1 mrg mpfr_set_str_binary (x, "11100110101011011111011100101011101110110001111100110E-293");
447 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDU);
448 1.1 mrg if (strcmp (s, "52") || e != -72)
449 1.1 mrg {
450 1.1 mrg printf ("Error in mpfr_get_str (31u): s=%s e=%d\n", s, (int) e);
451 1.1 mrg exit (1);
452 1.1 mrg }
453 1.1 mrg mpfr_free_str (s);
454 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDD);
455 1.1 mrg if (strcmp (s, "51") || e != -72)
456 1.1 mrg {
457 1.1 mrg printf ("Error in mpfr_get_str (31d): s=%s e=%d\n", s, (int) e);
458 1.1 mrg exit (1);
459 1.1 mrg }
460 1.1 mrg mpfr_free_str (s);
461 1.1 mrg
462 1.1 mrg /* 6712731423444934*2^536 ~ .151000000000000000000067*10^178 */
463 1.1 mrg mpfr_set_str_binary (x, "10111110110010011000110010011111101111000111111000110E536");
464 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 3, x, MPFR_RNDU);
465 1.1 mrg if (strcmp (s, "152") || e != 178)
466 1.1 mrg {
467 1.1 mrg printf ("Error in mpfr_get_str (32u): s=%s e=%d\n", s, (int) e);
468 1.1 mrg exit (1);
469 1.1 mrg }
470 1.1 mrg mpfr_free_str (s);
471 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 3, x, MPFR_RNDD);
472 1.1 mrg if (strcmp (s, "151") || e != 178)
473 1.1 mrg {
474 1.1 mrg printf ("Error in mpfr_get_str (32d): s=%s e=%d\n", s, (int) e);
475 1.1 mrg exit (1);
476 1.1 mrg }
477 1.1 mrg mpfr_free_str (s);
478 1.1 mrg
479 1.1 mrg /* 3356365711722467*2^540 ~ .120800000000000000000054*10^179 */
480 1.1 mrg mpfr_set_str_binary (x, "1011111011001001100011001001111110111100011111100011E540");
481 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 4, x, MPFR_RNDU);
482 1.1 mrg if (strcmp (s, "1209") || e != 179)
483 1.1 mrg {
484 1.1 mrg printf ("Error in mpfr_get_str (33u): s=%s e=%d\n", s, (int) e);
485 1.1 mrg exit (1);
486 1.1 mrg }
487 1.1 mrg mpfr_free_str (s);
488 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 4, x, MPFR_RNDD);
489 1.1 mrg if (strcmp (s, "1208") || e != 179)
490 1.1 mrg {
491 1.1 mrg printf ("Error in mpfr_get_str (33d): s=%s e=%d\n", s, (int) e);
492 1.1 mrg exit (1);
493 1.1 mrg }
494 1.1 mrg mpfr_free_str (s);
495 1.1 mrg
496 1.1 mrg /* 6475049196144587*2^100 ~ .8208099999999999999999988*10^46 */
497 1.1 mrg mpfr_set_str_binary (x, "10111000000010000010111011111001111010100011111001011E100");
498 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 5, x, MPFR_RNDU);
499 1.1 mrg if (strcmp (s, "82081") || e != 46)
500 1.1 mrg {
501 1.1 mrg printf ("Error in mpfr_get_str (34u): s=%s e=%d\n", s, (int) e);
502 1.1 mrg exit (1);
503 1.1 mrg }
504 1.1 mrg mpfr_free_str (s);
505 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 5, x, MPFR_RNDD);
506 1.1 mrg if (strcmp (s, "82080") || e != 46)
507 1.1 mrg {
508 1.1 mrg printf ("Error in mpfr_get_str (34d): s=%s e=%d\n", s, (int) e);
509 1.1 mrg exit (1);
510 1.1 mrg }
511 1.1 mrg mpfr_free_str (s);
512 1.1 mrg
513 1.1 mrg /* 6722280709661868*2^364 ~ .25260100000000000000000012*10^126 */
514 1.1 mrg mpfr_set_str_binary (x, "10111111000011110000011110001110001111010010010101100E364");
515 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 6, x, MPFR_RNDU);
516 1.1 mrg if (strcmp (s, "252602") || e != 126)
517 1.1 mrg {
518 1.1 mrg printf ("Error in mpfr_get_str (35u): s=%s e=%d\n", s, (int) e);
519 1.1 mrg exit (1);
520 1.1 mrg }
521 1.1 mrg mpfr_free_str (s);
522 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 6, x, MPFR_RNDD);
523 1.1 mrg if (strcmp (s, "252601") || e != 126)
524 1.1 mrg {
525 1.1 mrg printf ("Error in mpfr_get_str (35d): s=%s e=%d\n", s, (int) e);
526 1.1 mrg exit (1);
527 1.1 mrg }
528 1.1 mrg mpfr_free_str (s);
529 1.1 mrg
530 1.1 mrg /* 5381065484265332*2^(-455) ~ .578389299999999999999999982*10^(-121) */
531 1.1 mrg mpfr_set_str_binary (x, "10011000111100000110011110000101100111110011101110100E-455");
532 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 7, x, MPFR_RNDU);
533 1.1 mrg if (strcmp (s, "5783893") || e != -121)
534 1.1 mrg {
535 1.1 mrg printf ("Error in mpfr_get_str (36u): s=%s e=%d\n", s, (int) e);
536 1.1 mrg exit (1);
537 1.1 mrg }
538 1.1 mrg mpfr_free_str (s);
539 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 7, x, MPFR_RNDD);
540 1.1 mrg if (strcmp (s, "5783892") || e != -121)
541 1.1 mrg {
542 1.1 mrg printf ("Error in mpfr_get_str (36d): s=%s e=%d\n", s, (int) e);
543 1.1 mrg exit (1);
544 1.1 mrg }
545 1.1 mrg mpfr_free_str (s);
546 1.1 mrg
547 1.1 mrg /* 8369123604277281*2^(-852) ~ .27869147000000000000000000056*10^(-240) */
548 1.1 mrg mpfr_set_str_binary (x, "11101101110111010110001101111100000111010100000100001E-852");
549 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 8, x, MPFR_RNDU);
550 1.1 mrg if (strcmp (s, "27869148") || e != -240)
551 1.1 mrg {
552 1.1 mrg printf ("Error in mpfr_get_str (37u): s=%s e=%d\n", s, (int) e);
553 1.1 mrg exit (1);
554 1.1 mrg }
555 1.1 mrg mpfr_free_str (s);
556 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 8, x, MPFR_RNDD);
557 1.1 mrg if (strcmp (s, "27869147") || e != -240)
558 1.1 mrg {
559 1.1 mrg printf ("Error in mpfr_get_str (37d): s=%s e=%d\n", s, (int) e);
560 1.1 mrg exit (1);
561 1.1 mrg }
562 1.1 mrg mpfr_free_str (s);
563 1.1 mrg
564 1.1 mrg /* 7976538478610756*2^377 ~ .245540326999999999999999999982*10^130 */
565 1.1 mrg mpfr_set_str_binary (x, "11100010101101001111010010110100011100000100101000100E377");
566 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 9, x, MPFR_RNDU);
567 1.1 mrg if (strcmp (s, "245540327") || e != 130)
568 1.1 mrg {
569 1.1 mrg printf ("Error in mpfr_get_str (38u): s=%s e=%d\n", s, (int) e);
570 1.1 mrg exit (1);
571 1.1 mrg }
572 1.1 mrg mpfr_free_str (s);
573 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 9, x, MPFR_RNDD);
574 1.1 mrg if (strcmp (s, "245540326") || e != 130)
575 1.1 mrg {
576 1.1 mrg printf ("Error in mpfr_get_str (38d): s=%s e=%d\n", s, (int) e);
577 1.1 mrg exit (1);
578 1.1 mrg }
579 1.1 mrg mpfr_free_str (s);
580 1.1 mrg
581 1.1 mrg /* 8942832835564782*2^(-382) ~ .9078555839000000000000000000038*10^(-99) */
582 1.1 mrg mpfr_set_str_binary (x, "11111110001010111010110000110011100110001010011101110E-382");
583 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 10, x, MPFR_RNDU);
584 1.1 mrg if (strcmp (s, "9078555840") || e != -99)
585 1.1 mrg {
586 1.1 mrg printf ("Error in mpfr_get_str (39u): s=%s e=%d\n", s, (int) e);
587 1.1 mrg exit (1);
588 1.1 mrg }
589 1.1 mrg mpfr_free_str (s);
590 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 10, x, MPFR_RNDD);
591 1.1 mrg if (strcmp (s, "9078555839") || e != -99)
592 1.1 mrg {
593 1.1 mrg printf ("Error in mpfr_get_str (39d): s=%s e=%d\n", s, (int) e);
594 1.1 mrg exit (1);
595 1.1 mrg }
596 1.1 mrg mpfr_free_str (s);
597 1.1 mrg
598 1.1 mrg /* 4471416417782391*2^(-380) ~ .18157111678000000000000000000077*10^(-98) */
599 1.1 mrg mpfr_set_str_binary (x, "1111111000101011101011000011001110011000101001110111E-380");
600 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 11, x, MPFR_RNDU);
601 1.1 mrg if (strcmp (s, "18157111679") || e != -98)
602 1.1 mrg {
603 1.1 mrg printf ("Error in mpfr_get_str (40u): s=%s e=%d\n", s, (int) e);
604 1.1 mrg exit (1);
605 1.1 mrg }
606 1.1 mrg mpfr_free_str (s);
607 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 11, x, MPFR_RNDD);
608 1.1 mrg if (strcmp (s, "18157111678") || e != -98)
609 1.1 mrg {
610 1.1 mrg printf ("Error in mpfr_get_str (40d): s=%s e=%d\n", s, (int) e);
611 1.1 mrg exit (1);
612 1.1 mrg }
613 1.1 mrg mpfr_free_str (s);
614 1.1 mrg
615 1.1 mrg /* 7225450889282194*2^711 ~ .778380362292999999999999999999971*10^230 */
616 1.1 mrg mpfr_set_str_binary (x, "11001101010111000001001100001100110010000001010010010E711");
617 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 12, x, MPFR_RNDU);
618 1.1 mrg if (strcmp (s, "778380362293") || e != 230)
619 1.1 mrg {
620 1.1 mrg printf ("Error in mpfr_get_str (41u): s=%s e=%d\n", s, (int) e);
621 1.1 mrg exit (1);
622 1.1 mrg }
623 1.1 mrg mpfr_free_str (s);
624 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 12, x, MPFR_RNDD);
625 1.1 mrg if (strcmp (s, "778380362292") || e != 230)
626 1.1 mrg {
627 1.1 mrg printf ("Error in mpfr_get_str (41d): s=%s e=%d\n", s, (int) e);
628 1.1 mrg exit (1);
629 1.1 mrg }
630 1.1 mrg mpfr_free_str (s);
631 1.1 mrg
632 1.1 mrg /* 3612725444641097*2^713 ~ .1556760724585999999999999999999942*10^231 */
633 1.1 mrg mpfr_set_str_binary (x, "1100110101011100000100110000110011001000000101001001E713");
634 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 13, x, MPFR_RNDU);
635 1.1 mrg if (strcmp (s, "1556760724586") || e != 231)
636 1.1 mrg {
637 1.1 mrg printf ("Error in mpfr_get_str (42u): s=%s e=%d\n", s, (int) e);
638 1.1 mrg exit (1);
639 1.1 mrg }
640 1.1 mrg mpfr_free_str (s);
641 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 13, x, MPFR_RNDD);
642 1.1 mrg if (strcmp (s, "1556760724585") || e != 231)
643 1.1 mrg {
644 1.1 mrg printf ("Error in mpfr_get_str (42d): s=%s e=%d\n", s, (int) e);
645 1.1 mrg exit (1);
646 1.1 mrg }
647 1.1 mrg mpfr_free_str (s);
648 1.1 mrg
649 1.1 mrg /* 6965949469487146*2^(-248) ~ .15400733123779000000000000000000016*10^(-58) */
650 1.1 mrg mpfr_set_str_binary (x, "11000101111110111111001111111101001101111000000101010E-248");
651 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 14, x, MPFR_RNDU);
652 1.1 mrg if (strcmp (s, "15400733123780") || e != -58)
653 1.1 mrg {
654 1.1 mrg printf ("Error in mpfr_get_str (43u): s=%s e=%d\n", s, (int) e);
655 1.1 mrg exit (1);
656 1.1 mrg }
657 1.1 mrg mpfr_free_str (s);
658 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 14, x, MPFR_RNDD);
659 1.1 mrg if (strcmp (s, "15400733123779") || e != -58)
660 1.1 mrg {
661 1.1 mrg printf ("Error in mpfr_get_str (43d): s=%s e=%d\n", s, (int) e);
662 1.1 mrg exit (1);
663 1.1 mrg }
664 1.1 mrg mpfr_free_str (s);
665 1.1 mrg
666 1.1 mrg /* 3482974734743573*2^(-244) ~ .12320586499023200000000000000000013*10^(-57) */
667 1.1 mrg mpfr_set_str_binary (x, "1100010111111011111100111111110100110111100000010101E-244");
668 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 15, x, MPFR_RNDU);
669 1.1 mrg if (strcmp (s, "123205864990233") || e != -57)
670 1.1 mrg {
671 1.1 mrg printf ("Error in mpfr_get_str (44u): s=%s e=%d\n", s, (int) e);
672 1.1 mrg exit (1);
673 1.1 mrg }
674 1.1 mrg mpfr_free_str (s);
675 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 15, x, MPFR_RNDD);
676 1.1 mrg if (strcmp (s, "123205864990232") || e != -57)
677 1.1 mrg {
678 1.1 mrg printf ("Error in mpfr_get_str (44d): s=%s e=%d\n", s, (int) e);
679 1.1 mrg exit (1);
680 1.1 mrg }
681 1.1 mrg mpfr_free_str (s);
682 1.1 mrg
683 1.1 mrg /* 7542952370752766*2^(-919) ~ .170206189963739699999999999999999974*10^(-260) */
684 1.1 mrg mpfr_set_str_binary (x, "11010110011000100011001110100100111011100110011111110E-919");
685 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 16, x, MPFR_RNDU);
686 1.1 mrg if (strcmp (s, "1702061899637397") || e != -260)
687 1.1 mrg {
688 1.1 mrg printf ("Error in mpfr_get_str (45u): s=%s e=%d\n", s, (int) e);
689 1.1 mrg exit (1);
690 1.1 mrg }
691 1.1 mrg mpfr_free_str (s);
692 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 16, x, MPFR_RNDD);
693 1.1 mrg if (strcmp (s, "1702061899637396") || e != -260)
694 1.1 mrg {
695 1.1 mrg printf ("Error in mpfr_get_str (45d): s=%s e=%d\n", s, (int) e);
696 1.1 mrg exit (1);
697 1.1 mrg }
698 1.1 mrg mpfr_free_str (s);
699 1.1 mrg
700 1.1 mrg /* 5592117679628511*2^165 ~ .26153245263757307000000000000000000074*10^66 */
701 1.1 mrg mpfr_set_str_binary (x, "10011110111100000000001011011110101100010000011011111E165");
702 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 17, x, MPFR_RNDU);
703 1.1 mrg if (strcmp (s, "26153245263757308") || e != 66)
704 1.1 mrg {
705 1.1 mrg printf ("Error in mpfr_get_str (46u): s=%s e=%d\n", s, (int) e);
706 1.1 mrg exit (1);
707 1.1 mrg }
708 1.1 mrg mpfr_free_str (s);
709 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 17, x, MPFR_RNDD);
710 1.1 mrg if (strcmp (s, "26153245263757307") || e != 66)
711 1.1 mrg {
712 1.1 mrg printf ("Error in mpfr_get_str (46d): s=%s e=%d\n", s, (int) e);
713 1.1 mrg exit (1);
714 1.1 mrg }
715 1.1 mrg mpfr_free_str (s);
716 1.1 mrg
717 1.1 mrg mpfr_set_str_binary (x, "11010010110111100001011010000110010000100001011011101E1223");
718 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 17, x, MPFR_RNDN);
719 1.1 mrg if (strcmp (s, "10716284017294180") || e != 385)
720 1.1 mrg {
721 1.1 mrg printf ("Error in mpfr_get_str (47n): s=%s e=%d\n", s, (int) e);
722 1.1 mrg exit (1);
723 1.1 mrg }
724 1.1 mrg mpfr_free_str (s);
725 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 18, x, MPFR_RNDU);
726 1.1 mrg if (strcmp (s, "107162840172941805") || e != 385)
727 1.1 mrg {
728 1.1 mrg printf ("Error in mpfr_get_str (47u): s=%s e=%d\n", s, (int) e);
729 1.1 mrg exit (1);
730 1.1 mrg }
731 1.1 mrg mpfr_free_str (s);
732 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 18, x, MPFR_RNDD);
733 1.1 mrg if (strcmp (s, "107162840172941804") || e != 385)
734 1.1 mrg {
735 1.1 mrg printf ("Error in mpfr_get_str (47d): s=%s e=%d\n", s, (int) e);
736 1.1 mrg exit (1);
737 1.1 mrg }
738 1.1 mrg mpfr_free_str (s);
739 1.1 mrg
740 1.1 mrg mpfr_set_str_binary (x, "11111101111011000001010100001101101000010010001111E122620");
741 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 17, x, MPFR_RNDN);
742 1.1 mrg if (strcmp (s, "22183435284042374") || e != 36928)
743 1.1 mrg {
744 1.1 mrg printf ("Error in mpfr_get_str (48n): s=%s e=%ld\n", s, (long) e);
745 1.1 mrg exit (1);
746 1.1 mrg }
747 1.1 mrg mpfr_free_str (s);
748 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 18, x, MPFR_RNDU);
749 1.1 mrg if (strcmp (s, "221834352840423736") || e != 36928)
750 1.1 mrg {
751 1.1 mrg printf ("Error in mpfr_get_str (48u): s=%s e=%ld\n", s, (long) e);
752 1.1 mrg exit (1);
753 1.1 mrg }
754 1.1 mrg mpfr_free_str (s);
755 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 18, x, MPFR_RNDD);
756 1.1 mrg if (strcmp (s, "221834352840423735") || e != 36928)
757 1.1 mrg {
758 1.1 mrg printf ("Error in mpfr_get_str (48d): s=%s e=%ld\n", s, (long) e);
759 1.1 mrg exit (1);
760 1.1 mrg }
761 1.1 mrg mpfr_free_str (s);
762 1.1 mrg
763 1.1 mrg mpfr_set_prec (x, 45);
764 1.1 mrg mpfr_set_str_binary (x, "1E45");
765 1.1 mrg s = mpfr_get_str (NULL, &e, 32, 9, x, MPFR_RNDN);
766 1.1 mrg mpfr_free_str (s);
767 1.1 mrg
768 1.1 mrg mpfr_set_prec (x, 7);
769 1.1 mrg mpfr_set_str_binary (x, "0.1010101E10");
770 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDU);
771 1.1 mrg mpfr_free_str (s);
772 1.1 mrg
773 1.1 mrg /* checks rounding of negative numbers */
774 1.1 mrg mpfr_set_prec (x, 7);
775 1.1 mrg mpfr_set_str (x, "-11.5", 10, MPFR_RNDN);
776 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDD);
777 1.1 mrg if (strcmp (s, "-12"))
778 1.1 mrg {
779 1.1 mrg printf ("Error in mpfr_get_str for x=-11.5 and rnd=MPFR_RNDD\n"
780 1.1 mrg "got %s instead of -12\n", s);
781 1.1 mrg exit (1);
782 1.1 mrg }
783 1.1 mrg mpfr_free_str (s);
784 1.1 mrg
785 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDU);
786 1.1 mrg if (strcmp (s, "-11"))
787 1.1 mrg {
788 1.1 mrg printf ("Error in mpfr_get_str for x=-11.5 and rnd=MPFR_RNDU\n");
789 1.1 mrg exit (1);
790 1.1 mrg }
791 1.1 mrg mpfr_free_str (s);
792 1.1 mrg
793 1.1 mrg /* bug found by Jean-Pierre Merlet, produced error in mpfr_get_str */
794 1.1 mrg mpfr_set_prec (x, 128);
795 1.1 mrg mpfr_set_str_binary (x, "0.10111001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011010E3");
796 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 0, x, MPFR_RNDU);
797 1.1 mrg mpfr_free_str (s);
798 1.1 mrg
799 1.1 mrg mpfr_set_prec (x, 381);
800 1.1 mrg mpfr_set_str_binary (x, "0.111111111111111111111111111111111111111111111111111111111111111111101110110000100110011101101101001010111000101111000100100011110101010110101110100000010100001000110100000100011111001000010010000010001010111001011110000001110010111101100001111000101101100000010110000101100100000101010110010110001010100111001111100011100101100000100100111001100010010011110011011010110000001000010");
801 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 0, x, MPFR_RNDD);
802 1.1 mrg if (e != 0)
803 1.1 mrg {
804 1.1 mrg printf ("Error in mpfr_get_str for x=0.999999..., exponent is %d"
805 1.1 mrg " instead of 0\n", (int) e);
806 1.1 mrg exit (1);
807 1.1 mrg }
808 1.1 mrg mpfr_free_str (s);
809 1.1 mrg
810 1.1 mrg mpfr_set_prec (x, 5);
811 1.1 mrg mpfr_set_str_binary (x, "1101.1"); /* 13.5, or (16)_7 + 1/2 */
812 1.1 mrg s = mpfr_get_str (NULL, &e, 7, 2, x, MPFR_RNDN);
813 1.1 mrg /* we are in the tie case: both surrounding numbers are (16)_7 and
814 1.1 mrg (20)_7: since (16)_7 = 13 is odd and (20)_7 = 14 is even,
815 1.1 mrg we should have s = "20" and e = 2 */
816 1.1 mrg if (e != 2 || strcmp (s, "20"))
817 1.1 mrg {
818 1.1 mrg printf ("Error in mpfr_get_str for x=13.5, base 7\n");
819 1.1.1.2 mrg printf ("Expected s=20, e=2, got s=%s, e=%ld\n", s, (long) e);
820 1.1 mrg exit (1);
821 1.1 mrg }
822 1.1 mrg mpfr_free_str (s);
823 1.1 mrg /* try the same example, with input just below or above 13.5 */
824 1.1 mrg mpfr_set_prec (x, 1000);
825 1.1 mrg mpfr_set_str_binary (x, "1101.1");
826 1.1 mrg mpfr_nextabove (x);
827 1.1 mrg s = mpfr_get_str (NULL, &e, 7, 2, x, MPFR_RNDN);
828 1.1 mrg if (e != 2 || strcmp (s, "20"))
829 1.1 mrg {
830 1.1 mrg printf ("Error in mpfr_get_str for x=13.5+tiny, base 7\n");
831 1.1.1.2 mrg printf ("Expected s=20, e=2, got s=%s, e=%ld\n", s, (long) e);
832 1.1 mrg exit (1);
833 1.1 mrg }
834 1.1 mrg mpfr_free_str (s);
835 1.1 mrg mpfr_set_str_binary (x, "1101.1");
836 1.1 mrg mpfr_nextbelow (x);
837 1.1 mrg s = mpfr_get_str (NULL, &e, 7, 2, x, MPFR_RNDN);
838 1.1 mrg if (e != 2 || strcmp (s, "16"))
839 1.1 mrg {
840 1.1 mrg printf ("Error in mpfr_get_str for x=13.5-tiny, base 7\n");
841 1.1.1.2 mrg printf ("Expected s=16, e=2, got s=%s, e=%ld\n", s, (long) e);
842 1.1 mrg exit (1);
843 1.1 mrg }
844 1.1 mrg mpfr_free_str (s);
845 1.1 mrg
846 1.1 mrg mpfr_set_prec (x, 7);
847 1.1 mrg mpfr_set_str_binary (x, "110000.1"); /* 48.5, or (66)_7 + 1/2 */
848 1.1 mrg s = mpfr_get_str (NULL, &e, 7, 2, x, MPFR_RNDN);
849 1.1 mrg /* we are in the tie case: both surrounding numbers are (66)_7 and
850 1.1 mrg (100)_7: since (66)_7 = 48 is even and (100)_7 is odd,
851 1.1 mrg we should hase s = "66" and e = 2 */
852 1.1 mrg if (e != 2 || strcmp (s, "66"))
853 1.1 mrg {
854 1.1 mrg printf ("Error in mpfr_get_str for x=48.5, base 7\n");
855 1.1.1.2 mrg printf ("Expected s=66, e=2, got s=%s, e=%ld\n", s, (long) e);
856 1.1 mrg exit (1);
857 1.1 mrg }
858 1.1 mrg mpfr_free_str (s);
859 1.1 mrg /* try the same example, with input just below or above 48.5 */
860 1.1 mrg mpfr_set_prec (x, 1000);
861 1.1 mrg mpfr_set_str_binary (x, "110000.1");
862 1.1 mrg mpfr_nextabove (x);
863 1.1 mrg s = mpfr_get_str (NULL, &e, 7, 2, x, MPFR_RNDN);
864 1.1 mrg if (e != 3 || strcmp (s, "10"))
865 1.1 mrg {
866 1.1 mrg printf ("Error in mpfr_get_str for x=48.5+tiny, base 7\n");
867 1.1.1.2 mrg printf ("Expected s=10, e=3, got s=%s, e=%ld\n", s, (long) e);
868 1.1 mrg exit (1);
869 1.1 mrg }
870 1.1 mrg mpfr_free_str (s);
871 1.1 mrg mpfr_set_str_binary (x, "110000.1");
872 1.1 mrg mpfr_nextbelow (x);
873 1.1 mrg s = mpfr_get_str (NULL, &e, 7, 2, x, MPFR_RNDN);
874 1.1 mrg if (e != 2 || strcmp (s, "66"))
875 1.1 mrg {
876 1.1 mrg printf ("Error in mpfr_get_str for x=48.5-tiny, base 7\n");
877 1.1.1.2 mrg printf ("Expected s=66, e=2, got s=%s, e=%ld\n", s, (long) e);
878 1.1 mrg exit (1);
879 1.1 mrg }
880 1.1 mrg mpfr_free_str (s);
881 1.1 mrg
882 1.1 mrg mpfr_clear (x);
883 1.1 mrg }
884 1.1 mrg
885 1.1 mrg /* bugs found by Alain Delplanque */
886 1.1 mrg static void
887 1.1 mrg check_large (void)
888 1.1 mrg {
889 1.1 mrg mpfr_t x;
890 1.1 mrg char *s, s1[7];
891 1.1 mrg const char xm[] = { '1', '1', '9', '1', '3', '2', '9', '3', '7', '3',
892 1.1 mrg '5', '8', '4', '4', '5', '4', '9', '0', '2', '9',
893 1.1 mrg '6', '3', '4', '4', '6', '9', '9', '1', '9', '5',
894 1.1 mrg '5', '7', '2', '0', '1', '7', '5', '2', '8', '6',
895 1.1 mrg '1', '2', '5', '2', '5', '2', '7', '4', '0', '2',
896 1.1 mrg '7', '9', '1', '1', '7', '4', '5', '6', '7', '5',
897 1.1 mrg '9', '3', '1', '4', '2', '5', '5', '6', '6', '6',
898 1.1 mrg '1', '6', '4', '3', '8', '1', '2', '8', '7', '6',
899 1.1 mrg '2', '9', '2', '0', '8', '8', '9', '4', '3', '9',
900 1.1 mrg '6', '2', '8', '4', '1', '1', '8', '1', '0', '6',
901 1.1 mrg '2', '3', '7', '6', '3', '8', '1', '5', '1', '7',
902 1.1 mrg '3', '4', '6', '1', '2', '4', '0', '1', '3', '0',
903 1.1 mrg '8', '4', '1', '3', '9', '3', '2', '0', '1', '6',
904 1.1 mrg '3', '6', '7', '1', '5', '1', '7', '5', '0', '1',
905 1.1 mrg '9', '8', '4', '0', '8', '2', '7', '9', '1', '3',
906 1.1 mrg '2', '2', '8', '3', '4', '1', '6', '2', '3', '9',
907 1.1 mrg '6', '2', '0', '7', '3', '5', '5', '5', '3', '4',
908 1.1 mrg '2', '1', '7', '0', '9', '7', '6', '2', '1', '0',
909 1.1 mrg '3', '3', '5', '4', '7', '6', '0', '9', '7', '6',
910 1.1 mrg '9', '3', '5', '1', '7', '8', '6', '8', '8', '2',
911 1.1 mrg '8', '1', '4', '3', '7', '4', '3', '3', '2', '4',
912 1.1 mrg '1', '5', '4', '7', '8', '1', '1', '4', '2', '1',
913 1.1 mrg '2', '4', '2', '7', '6', '5', '9', '5', '4', '5',
914 1.1 mrg '2', '6', '7', '3', '0', '3', '4', '0', '6', '9',
915 1.1 mrg '1', '8', '9', '9', '9', '8', '0', '5', '7', '0',
916 1.1 mrg '9', '3', '8', '7', '6', '2', '4', '6', '1', '6',
917 1.1 mrg '7', '2', '0', '3', '5', '9', '3', '5', '8', '8',
918 1.1 mrg '9', '7', '7', '9', '2', '7', '0', '8', '1', '6',
919 1.1 mrg '8', '7', '4', '8', '5', '3', '0', '8', '4', '3',
920 1.1 mrg '5', '6', '5', '1', '6', '6', '0', '9', '7', '9',
921 1.1 mrg '8', '9', '2', '7', '2', '6', '8', '5', '9', '4',
922 1.1 mrg '5', '8', '1', '3', '7', '2', '9', '3', '8', '3',
923 1.1 mrg '7', '9', '1', '7', '9', '9', '7', '7', '2', '8',
924 1.1 mrg '4', '6', '5', '5', '7', '3', '3', '8', '3', '6',
925 1.1 mrg '6', '9', '7', '1', '4', '3', '3', '7', '1', '4',
926 1.1 mrg '9', '4', '1', '2', '4', '9', '5', '1', '4', '7',
927 1.1 mrg '2', '6', '4', '4', '8', '0', '6', '2', '6', '0',
928 1.1 mrg '6', '9', '8', '1', '1', '7', '9', '9', '3', '9',
929 1.1 mrg '3', '8', '4', '7', '3', '1', '9', '0', '2', '3',
930 1.1 mrg '5', '3', '5', '4', '2', '1', '1', '7', '6', '7',
931 1.1 mrg '4', '3', '2', '2', '0', '6', '5', '9', '9', '3',
932 1.1 mrg '2', '6', '7', '1', '2', '0', '0', '3', '7', '3',
933 1.1 mrg '8', '7', '4', '3', '3', '3', '3', '3', '2', '3',
934 1.1 mrg '8', '2', '8', '6', '3', '1', '5', '5', '2', '2',
935 1.1 mrg '5', '9', '3', '3', '7', '0', '6', '2', '8', '1',
936 1.1 mrg '0', '3', '6', '7', '6', '9', '6', '5', '9', '0',
937 1.1 mrg '6', '6', '6', '3', '6', '9', '9', '3', '8', '7',
938 1.1 mrg '6', '5', '4', '5', '3', '5', '9', '4', '0', '0',
939 1.1 mrg '7', '5', '8', '5', '4', '1', '4', '3', '1', '5',
940 1.1 mrg '7', '6', '6', '3', '4', '4', '5', '0', '8', '7',
941 1.1 mrg '5', '7', '5', '0', '1', '0', '1', '8', '4', '7',
942 1.1 mrg '3', '1', '9', '9', '2', '7', '1', '1', '1', '2',
943 1.1 mrg '3', '9', '9', '6', '5', '9', '2', '3', '2', '8',
944 1.1 mrg '1', '5', '5', '1', '2', '6', '4', '9', '6', '6',
945 1.1 mrg '4', '5', '1', '1', '6', '0', '0', '3', '2', '8',
946 1.1 mrg '4', '8', '7', '1', '4', '9', '6', '8', '1', '6',
947 1.1 mrg '5', '9', '8', '3', '4', '2', '9', '7', '0', '1',
948 1.1 mrg '9', '2', '6', '6', '9', '1', '3', '5', '9', '3',
949 1.1 mrg '2', '9', '6', '2', '3', '0', '6', '0', '1', '1',
950 1.1 mrg '6', '5', '1', '7', '9', '0', '7', '5', '8', '6',
951 1.1 mrg '8', '4', '2', '1', '0', '3', '8', '6', '6', '4',
952 1.1 mrg '4', '9', '9', '7', '5', '8', '1', '7', '5', '7',
953 1.1 mrg '9', '6', '6', '8', '8', '5', '8', '6', '7', '4',
954 1.1 mrg '0', '7', '2', '0', '2', '9', '9', '4', '4', '1',
955 1.1 mrg '9', '5', '8', '6', '5', '0', '6', '7', '4', '2',
956 1.1 mrg '7', '3', '2', '3', '2', '7', '0', '2', '1', '3',
957 1.1 mrg '0', '5', '9', '0', '3', '9', '1', '4', '5', '3',
958 1.1 mrg '7', '2', '7', '0', '8', '5', '5', '4', '6', '1',
959 1.1 mrg '1', '0', '0', '9', '2', '0', '4', '1', '6', '6',
960 1.1 mrg '4', '6', '9', '1', '3', '2', '8', '5', '0', '3',
961 1.1 mrg '3', '8', '9', '8', '7', '8', '5', '9', '5', '5',
962 1.1 mrg '9', '1', '9', '3', '6', '5', '4', '1', '7', '4',
963 1.1 mrg '0', '2', '4', '7', '2', '9', '7', '1', '2', '4',
964 1.1 mrg '5', '8', '1', '4', '4', '6', '1', '8', '5', '8',
965 1.1 mrg '7', '6', '9', '7', '2', '1', '2', '0', '8', '9',
966 1.1 mrg '5', '9', '5', '5', '3', '8', '1', '2', '5', '4',
967 1.1 mrg '3', '0', '7', '6', '5', '1', '7', '8', '2', '0',
968 1.1 mrg '0', '7', '6', '7', '4', '8', '1', '0', '6', '3',
969 1.1 mrg '2', '3', '0', '5', '2', '5', '0', '1', '1', '4',
970 1.1 mrg '3', '8', '4', '5', '2', '3', '9', '5', '0', '9',
971 1.1 mrg '8', '2', '6', '4', '7', '4', '8', '0', '1', '1',
972 1.1 mrg '7', '1', '5', '4', '9', '0', '9', '2', '2', '3',
973 1.1 mrg '8', '1', '6', '9', '0', '4', '6', '4', '5', '4',
974 1.1 mrg '6', '3', '8', '7', '3', '6', '1', '7', '2', '3',
975 1.1 mrg '4', '5', '5', '2', '0', '2', '5', '8', '1', '4',
976 1.1 mrg '9', '3', '0', '7', '4', '1', '6', '8', '7', '8',
977 1.1 mrg '2', '6', '2', '5', '1', '0', '7', '4', '7', '3',
978 1.1 mrg '6', '6', '4', '5', '6', '6', '6', '6', '8', '5',
979 1.1 mrg '1', '3', '5', '7', '1', '6', '2', '0', '9', '2',
980 1.1 mrg '3', '2', '6', '0', '7', '9', '8', '1', '6', '2',
981 1.1 mrg '0', '3', '8', '8', '0', '2', '8', '7', '7', '5',
982 1.1 mrg '9', '3', '1', '0', '6', '7', '5', '7', '3', '1',
983 1.1 mrg '2', '7', '7', '2', '0', '0', '4', '1', '2', '8',
984 1.1 mrg '2', '0', '8', '4', '0', '5', '0', '5', '0', '1',
985 1.1 mrg '9', '3', '3', '6', '3', '6', '9', '6', '2', '8',
986 1.1 mrg '2', '9', '7', '5', '3', '8', '8', '9', '1', '1',
987 1.1 mrg '4', '5', '7', '7', '5', '6', '0', '2', '7', '9',
988 1.1 mrg '7', '2', '1', '7', '4', '3', '0', '3', '6', '7',
989 1.1 mrg '3', '7', '2', '2', '7', '5', '6', '2', '3', '1',
990 1.1 mrg '2', '1', '3', '1', '4', '2', '6', '9', '2', '3',
991 1.1 mrg '\0' };
992 1.1 mrg mpfr_exp_t e;
993 1.1 mrg
994 1.1 mrg mpfr_init2 (x, 3322);
995 1.1 mrg mpfr_set_str (x, xm, 10, MPFR_RNDN);
996 1.1 mrg mpfr_div_2exp (x, x, 4343, MPFR_RNDN);
997 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 1000, x, MPFR_RNDN);
998 1.1 mrg if (s[999] != '1') /* s must be 5.04383...689071e-309 */
999 1.1 mrg {
1000 1.1 mrg printf ("Error in check_large: expected '689071', got '%s'\n",
1001 1.1 mrg s + 994);
1002 1.1 mrg exit (1);
1003 1.1 mrg }
1004 1.1 mrg mpfr_free_str (s);
1005 1.1 mrg
1006 1.1 mrg mpfr_mul_2exp (x, x, 4343, MPFR_RNDN);
1007 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDN);
1008 1.1 mrg if (strcmp (s, "12") || (e != 1000))
1009 1.1 mrg {
1010 1.1 mrg printf ("Error in check_large: expected 0.12e1000\n");
1011 1.1 mrg printf ("got %se%d\n", s, (int) e);
1012 1.1 mrg exit (1);
1013 1.1 mrg }
1014 1.1 mrg mpfr_free_str (s);
1015 1.1 mrg
1016 1.1 mrg mpfr_set_nan (x);
1017 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 1000, x, MPFR_RNDN);
1018 1.1 mrg if (strcmp (s, "@NaN@"))
1019 1.1 mrg {
1020 1.1 mrg printf ("Error for NaN\n");
1021 1.1 mrg exit (1);
1022 1.1 mrg }
1023 1.1 mrg mpfr_free_str (s);
1024 1.1 mrg
1025 1.1 mrg mpfr_get_str (s1, &e, 10, 1000, x, MPFR_RNDN);
1026 1.1 mrg
1027 1.1 mrg mpfr_set_inf (x, 1);
1028 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 1000, x, MPFR_RNDN);
1029 1.1 mrg if (strcmp (s, "@Inf@"))
1030 1.1 mrg {
1031 1.1 mrg printf ("Error for Inf\n");
1032 1.1 mrg exit (1);
1033 1.1 mrg }
1034 1.1 mrg mpfr_free_str (s);
1035 1.1 mrg
1036 1.1 mrg mpfr_get_str (s1, &e, 10, 1000, x, MPFR_RNDN);
1037 1.1 mrg
1038 1.1 mrg mpfr_set_inf (x, -1);
1039 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 1000, x, MPFR_RNDN);
1040 1.1 mrg if (strcmp (s, "-@Inf@"))
1041 1.1 mrg {
1042 1.1 mrg printf ("Error for -Inf\n");
1043 1.1 mrg exit (1);
1044 1.1 mrg }
1045 1.1 mrg mpfr_free_str (s);
1046 1.1 mrg
1047 1.1 mrg mpfr_get_str (s1, &e, 10, 1000, x, MPFR_RNDN);
1048 1.1 mrg
1049 1.1 mrg mpfr_set_ui (x, 0, MPFR_RNDN);
1050 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDN);
1051 1.1 mrg if (e != 0 || strcmp (s, "00"))
1052 1.1 mrg {
1053 1.1 mrg printf ("Error for 0.0\n");
1054 1.1 mrg exit (1);
1055 1.1 mrg }
1056 1.1 mrg mpfr_free_str (s);
1057 1.1 mrg mpfr_get_str (s1, &e, 10, 2, x, MPFR_RNDN);
1058 1.1 mrg
1059 1.1 mrg mpfr_neg (x, x, MPFR_RNDN); /* -0.0 */
1060 1.1 mrg s = mpfr_get_str (NULL, &e, 10, 2, x, MPFR_RNDN);
1061 1.1 mrg if (e != 0 || strcmp (s, "-00"))
1062 1.1 mrg {
1063 1.1 mrg printf ("Error for -0.0\ngot %se%d\n", s, (int) e);
1064 1.1 mrg exit (1);
1065 1.1 mrg }
1066 1.1 mrg mpfr_free_str (s);
1067 1.1 mrg mpfr_get_str (s1, &e, 10, 2, x, MPFR_RNDN);
1068 1.1 mrg
1069 1.1 mrg mpfr_clear (x);
1070 1.1 mrg }
1071 1.1 mrg
1072 1.1 mrg #define MAX_DIGITS 100
1073 1.1 mrg
1074 1.1 mrg static void
1075 1.1 mrg check_special (int b, mpfr_prec_t p)
1076 1.1 mrg {
1077 1.1 mrg mpfr_t x;
1078 1.1 mrg int i, j;
1079 1.1 mrg char s[MAX_DIGITS + 2], s2[MAX_DIGITS + 2], c;
1080 1.1 mrg mpfr_exp_t e;
1081 1.1 mrg int r;
1082 1.1 mrg size_t m;
1083 1.1 mrg
1084 1.1 mrg /* check for invalid base */
1085 1.1 mrg if (mpfr_get_str (s, &e, 1, 10, x, MPFR_RNDN) != NULL)
1086 1.1 mrg {
1087 1.1 mrg printf ("Error: mpfr_get_str should not accept base = 1\n");
1088 1.1 mrg exit (1);
1089 1.1 mrg }
1090 1.1 mrg if (mpfr_get_str (s, &e, 63, 10, x, MPFR_RNDN) != NULL)
1091 1.1 mrg {
1092 1.1 mrg printf ("Error: mpfr_get_str should not accept base = 63\n");
1093 1.1 mrg exit (1);
1094 1.1 mrg }
1095 1.1 mrg
1096 1.1 mrg s2[0] = '1';
1097 1.1 mrg for (i=1; i<MAX_DIGITS+2; i++)
1098 1.1 mrg s2[i] = '0';
1099 1.1 mrg
1100 1.1 mrg mpfr_init2 (x, p);
1101 1.1 mrg mpfr_set_ui (x, 1, MPFR_RNDN);
1102 1.1 mrg for (i=1; i<MAX_DIGITS && mpfr_mul_ui (x, x, b, MPFR_RNDN) == 0; i++)
1103 1.1 mrg {
1104 1.1 mrg /* x = b^i (exact) */
1105 1.1 mrg for (r = 0; r < MPFR_RND_MAX; r++)
1106 1.1 mrg for (m= (i<3)? 2 : i-1 ; (int) m <= i+1 ; m++)
1107 1.1 mrg {
1108 1.1 mrg mpfr_get_str (s, &e, b, m, x, (mpfr_rnd_t) r);
1109 1.1 mrg /* s should be 1 followed by (m-1) zeros, and e should be i+1 */
1110 1.1 mrg if ((e != i+1) || strncmp (s, s2, m) != 0)
1111 1.1 mrg {
1112 1.1 mrg printf ("Error in mpfr_get_str for %d^%d\n", b, i);
1113 1.1 mrg exit (1);
1114 1.1 mrg }
1115 1.1 mrg }
1116 1.1 mrg if (mpfr_sub_ui (x, x, 1, MPFR_RNDN) != 0)
1117 1.1 mrg break;
1118 1.1 mrg /* now x = b^i-1 (exact) */
1119 1.1 mrg for (r = 0; r < MPFR_RND_MAX; r++)
1120 1.1 mrg if (i >= 2)
1121 1.1 mrg {
1122 1.1 mrg mpfr_get_str (s, &e, b, i, x, (mpfr_rnd_t) r);
1123 1.1 mrg /* should be i times (b-1) */
1124 1.1 mrg c = (b <= 10) ? '0' + b - 1 : 'a' + (b - 11);
1125 1.1 mrg for (j=0; (j < i) && (s[j] == c); j++);
1126 1.1 mrg if ((j < i) || (e != i))
1127 1.1 mrg {
1128 1.1 mrg printf ("Error in mpfr_get_str for %d^%d-1\n", b, i);
1129 1.1 mrg printf ("got 0.%s*2^%d\n", s, (int) e);
1130 1.1 mrg exit (1);
1131 1.1 mrg }
1132 1.1 mrg }
1133 1.1 mrg if (i >= 3)
1134 1.1 mrg {
1135 1.1 mrg mpfr_get_str (s, &e, b, i - 1, x, MPFR_RNDU);
1136 1.1 mrg /* should be b^i */
1137 1.1 mrg if ((e != i+1) || strncmp (s, s2, i - 1) != 0)
1138 1.1 mrg {
1139 1.1 mrg printf ("Error in mpfr_get_str for %d^%d-1\n", b, i);
1140 1.1 mrg printf ("got 0.%s*2^%d\n", s, (int) e);
1141 1.1 mrg exit (1);
1142 1.1 mrg }
1143 1.1 mrg }
1144 1.1 mrg
1145 1.1 mrg mpfr_add_ui (x, x, 1, MPFR_RNDN);
1146 1.1 mrg }
1147 1.1 mrg mpfr_clear (x);
1148 1.1 mrg }
1149 1.1 mrg
1150 1.1 mrg static void
1151 1.1 mrg check_bug_base2k (void)
1152 1.1 mrg {
1153 1.1 mrg /*
1154 1.1 mrg * -2.63b22b55697e800000000000@130
1155 1.1 mrg * +-0.1001100011101100100010101101010101011010010111111010000000000000000000000000+00000000000000000000001E522
1156 1.1 mrg */
1157 1.1 mrg mpfr_t xx, yy, zz;
1158 1.1 mrg char *s;
1159 1.1 mrg mpfr_exp_t e;
1160 1.1 mrg
1161 1.1 mrg mpfr_init2 (xx, 107);
1162 1.1 mrg mpfr_init2 (yy, 79);
1163 1.1 mrg mpfr_init2 (zz, 99);
1164 1.1 mrg
1165 1.1 mrg mpfr_set_str (xx, "-1.90e8c3e525d7c0000000000000@-18", 16, MPFR_RNDN);
1166 1.1 mrg mpfr_set_str (yy, "-2.63b22b55697e8000000@130", 16, MPFR_RNDN);
1167 1.1 mrg mpfr_add (zz, xx, yy, MPFR_RNDD);
1168 1.1 mrg s = mpfr_get_str (NULL, &e, 16, 0, zz, MPFR_RNDN);
1169 1.1 mrg if (strcmp (s, "-263b22b55697e8000000000008"))
1170 1.1 mrg {
1171 1.1 mrg printf ("Error for get_str base 16\n"
1172 1.1 mrg "Got %s expected -263b22b55697e8000000000008\n", s);
1173 1.1 mrg exit (1);
1174 1.1 mrg }
1175 1.1 mrg mpfr_free_str (s);
1176 1.1 mrg mpfr_clears (xx, yy, zz, (mpfr_ptr) 0);
1177 1.1 mrg }
1178 1.1 mrg
1179 1.1 mrg static void
1180 1.1 mrg check_reduced_exprange (void)
1181 1.1 mrg {
1182 1.1 mrg mpfr_t x;
1183 1.1 mrg char *s;
1184 1.1 mrg mpfr_exp_t emax, e;
1185 1.1 mrg
1186 1.1 mrg emax = mpfr_get_emax ();
1187 1.1 mrg mpfr_init2 (x, 8);
1188 1.1 mrg mpfr_set_str (x, "0.11111111E0", 2, MPFR_RNDN);
1189 1.1 mrg set_emax (0);
1190 1.1 mrg s = mpfr_get_str (NULL, &e, 16, 0, x, MPFR_RNDN);
1191 1.1 mrg set_emax (emax);
1192 1.1 mrg if (strcmp (s, "ff0"))
1193 1.1 mrg {
1194 1.1 mrg printf ("Error for mpfr_get_str on 0.11111111E0 in base 16:\n"
1195 1.1 mrg "Got \"%s\" instead of \"ff0\".\n", s);
1196 1.1 mrg exit (1);
1197 1.1 mrg }
1198 1.1 mrg mpfr_free_str (s);
1199 1.1 mrg mpfr_clear (x);
1200 1.1 mrg }
1201 1.1 mrg
1202 1.1 mrg #define ITER 1000
1203 1.1 mrg
1204 1.1 mrg int
1205 1.1 mrg main (int argc, char *argv[])
1206 1.1 mrg {
1207 1.1 mrg int b;
1208 1.1 mrg mpfr_t x;
1209 1.1 mrg mpfr_rnd_t r;
1210 1.1 mrg char s[MAX_DIGITS + 2];
1211 1.1 mrg mpfr_exp_t e, f;
1212 1.1 mrg size_t m;
1213 1.1 mrg mpfr_prec_t p;
1214 1.1 mrg int i;
1215 1.1 mrg
1216 1.1 mrg tests_start_mpfr ();
1217 1.1 mrg
1218 1.1 mrg check_small ();
1219 1.1 mrg
1220 1.1 mrg check_special (2, 2);
1221 1.1 mrg for (i = 0; i < ITER; i++)
1222 1.1 mrg {
1223 1.1 mrg p = 2 + (randlimb () % (MAX_DIGITS - 1));
1224 1.1 mrg b = 2 + (randlimb () % 35);
1225 1.1 mrg check_special (b, p);
1226 1.1 mrg }
1227 1.1 mrg
1228 1.1 mrg mpfr_init2 (x, MAX_DIGITS);
1229 1.1 mrg for (i = 0; i < ITER; i++)
1230 1.1 mrg {
1231 1.1 mrg m = 2 + (randlimb () % (MAX_DIGITS - 1));
1232 1.1 mrg mpfr_urandomb (x, RANDS);
1233 1.1 mrg e = (mpfr_exp_t) (randlimb () % 21) - 10;
1234 1.1 mrg mpfr_set_exp (x, (e == -10) ? mpfr_get_emin () :
1235 1.1 mrg ((e == 10) ? mpfr_get_emax () : e));
1236 1.1 mrg b = 2 + (randlimb () % 35);
1237 1.1 mrg r = RND_RAND ();
1238 1.1 mrg mpfr_get_str (s, &f, b, m, x, r);
1239 1.1 mrg }
1240 1.1 mrg mpfr_clear (x);
1241 1.1 mrg
1242 1.1 mrg check_large ();
1243 1.1 mrg check3 ("4.059650008e-83", MPFR_RNDN, "40597");
1244 1.1 mrg check3 ("-6.606499965302424244461355e233", MPFR_RNDN, "-66065");
1245 1.1 mrg check3 ("-7.4", MPFR_RNDN, "-74000");
1246 1.1 mrg check3 ("0.997", MPFR_RNDN, "99700");
1247 1.1 mrg check3 ("-4.53063926135729747564e-308", MPFR_RNDN, "-45306");
1248 1.1 mrg check3 ("2.14478198760196000000e+16", MPFR_RNDN, "21448");
1249 1.1 mrg check3 ("7.02293374921793516813e-84", MPFR_RNDN, "70229");
1250 1.1 mrg
1251 1.1 mrg check3 ("-6.7274500420134077e-87", MPFR_RNDN, "-67275");
1252 1.1 mrg check3 ("-6.7274500420134077e-87", MPFR_RNDZ, "-67274");
1253 1.1 mrg check3 ("-6.7274500420134077e-87", MPFR_RNDU, "-67274");
1254 1.1 mrg check3 ("-6.7274500420134077e-87", MPFR_RNDD, "-67275");
1255 1.1 mrg check3 ("-6.7274500420134077e-87", MPFR_RNDA, "-67275");
1256 1.1 mrg
1257 1.1 mrg check3 ("6.7274500420134077e-87", MPFR_RNDN, "67275");
1258 1.1 mrg check3 ("6.7274500420134077e-87", MPFR_RNDZ, "67274");
1259 1.1 mrg check3 ("6.7274500420134077e-87", MPFR_RNDU, "67275");
1260 1.1 mrg check3 ("6.7274500420134077e-87", MPFR_RNDD, "67274");
1261 1.1 mrg check3 ("6.7274500420134077e-87", MPFR_RNDA, "67275");
1262 1.1 mrg
1263 1.1 mrg check_bug_base2k ();
1264 1.1 mrg check_reduced_exprange ();
1265 1.1 mrg
1266 1.1 mrg tests_end_mpfr ();
1267 1.1 mrg return 0;
1268 1.1 mrg }
1269