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