Home | History | Annotate | Line # | Download | only in tests
tlog.c revision 1.1
      1  1.1  mrg /* Test file for mpfr_log.
      2  1.1  mrg 
      3  1.1  mrg Copyright 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
      4  1.1  mrg Contributed by the Arenaire and Cacao 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 <stdio.h>
     24  1.1  mrg #include <stdlib.h>
     25  1.1  mrg 
     26  1.1  mrg #include "mpfr-test.h"
     27  1.1  mrg 
     28  1.1  mrg #ifdef CHECK_EXTERNAL
     29  1.1  mrg static int
     30  1.1  mrg test_log (mpfr_ptr a, mpfr_srcptr b, mpfr_rnd_t rnd_mode)
     31  1.1  mrg {
     32  1.1  mrg   int res;
     33  1.1  mrg   int ok = rnd_mode == MPFR_RNDN && mpfr_number_p (b) && mpfr_get_prec (a)>=53;
     34  1.1  mrg   if (ok)
     35  1.1  mrg     {
     36  1.1  mrg       mpfr_print_raw (b);
     37  1.1  mrg     }
     38  1.1  mrg   res = mpfr_log (a, b, rnd_mode);
     39  1.1  mrg   if (ok)
     40  1.1  mrg     {
     41  1.1  mrg       printf (" ");
     42  1.1  mrg       mpfr_print_raw (a);
     43  1.1  mrg       printf ("\n");
     44  1.1  mrg     }
     45  1.1  mrg   return res;
     46  1.1  mrg }
     47  1.1  mrg #else
     48  1.1  mrg #define test_log mpfr_log
     49  1.1  mrg #endif
     50  1.1  mrg 
     51  1.1  mrg static void
     52  1.1  mrg check2 (const char *as, mpfr_rnd_t rnd_mode, const char *res1s)
     53  1.1  mrg {
     54  1.1  mrg   mpfr_t ta, tres;
     55  1.1  mrg 
     56  1.1  mrg   mpfr_inits2 (53, ta, tres, (mpfr_ptr) 0);
     57  1.1  mrg   mpfr_set_str1 (ta, as);
     58  1.1  mrg   test_log (tres, ta, rnd_mode);
     59  1.1  mrg 
     60  1.1  mrg   if (mpfr_cmp_str1 (tres, res1s))
     61  1.1  mrg     {
     62  1.1  mrg       printf ("mpfr_log failed for    a=%s, rnd_mode=%s\n",
     63  1.1  mrg               as, mpfr_print_rnd_mode (rnd_mode));
     64  1.1  mrg       printf ("correct result is        %s\n mpfr_log gives          ",
     65  1.1  mrg               res1s);
     66  1.1  mrg       mpfr_out_str(stdout, 10, 0, tres, MPFR_RNDN);
     67  1.1  mrg       exit (1);
     68  1.1  mrg     }
     69  1.1  mrg   mpfr_clears (ta, tres, (mpfr_ptr) 0);
     70  1.1  mrg }
     71  1.1  mrg 
     72  1.1  mrg static void
     73  1.1  mrg check3 (double d, unsigned long prec, mpfr_rnd_t rnd)
     74  1.1  mrg {
     75  1.1  mrg   mpfr_t x, y;
     76  1.1  mrg 
     77  1.1  mrg   mpfr_init2 (x, prec);
     78  1.1  mrg   mpfr_init2 (y, prec);
     79  1.1  mrg   mpfr_set_d (x, d, rnd);
     80  1.1  mrg   test_log (y, x, rnd);
     81  1.1  mrg   mpfr_out_str (stdout, 10, 0, y, rnd);
     82  1.1  mrg   puts ("");
     83  1.1  mrg   mpfr_print_binary (y);
     84  1.1  mrg   puts ("");
     85  1.1  mrg   mpfr_clear (x);
     86  1.1  mrg   mpfr_clear (y);
     87  1.1  mrg }
     88  1.1  mrg 
     89  1.1  mrg /* examples from Jean-Michel Muller and Vincent Lefevre
     90  1.1  mrg    Cf http://www.ens-lyon.fr/~jmmuller/Intro-to-TMD.htm
     91  1.1  mrg */
     92  1.1  mrg 
     93  1.1  mrg static void
     94  1.1  mrg check_worst_cases (void)
     95  1.1  mrg {
     96  1.1  mrg   check2("1.00089971802309629645", MPFR_RNDD, "8.99313519443722736088e-04");
     97  1.1  mrg   check2("1.00089971802309629645", MPFR_RNDN, "8.99313519443722844508e-04");
     98  1.1  mrg   check2("1.00089971802309629645", MPFR_RNDU, "8.99313519443722844508e-04");
     99  1.1  mrg 
    100  1.1  mrg   check2("1.01979300812244555452", MPFR_RNDD, "1.95996734891603630047e-02");
    101  1.1  mrg   check2("1.01979300812244555452", MPFR_RNDN, "1.95996734891603664741e-02");
    102  1.1  mrg   check2("1.01979300812244555452", MPFR_RNDU, "1.95996734891603664741e-02");
    103  1.1  mrg 
    104  1.1  mrg   check2("1.02900871924604464525", MPFR_RNDD, "2.85959303301472726744e-02");
    105  1.1  mrg   check2("1.02900871924604464525", MPFR_RNDN, "2.85959303301472761438e-02");
    106  1.1  mrg   check2("1.02900871924604464525", MPFR_RNDU, "2.85959303301472761438e-02");
    107  1.1  mrg 
    108  1.1  mrg   check2("1.27832870030418943585", MPFR_RNDD, "2.45553521871417795852e-01");
    109  1.1  mrg   check2("1.27832870030418943585", MPFR_RNDN, "2.45553521871417823608e-01");
    110  1.1  mrg   check2("1.27832870030418943585", MPFR_RNDU, "2.45553521871417823608e-01");
    111  1.1  mrg 
    112  1.1  mrg   check2("1.31706530746788241792", MPFR_RNDD, "2.75406009586277422674e-01");
    113  1.1  mrg   check2("1.31706530746788241792", MPFR_RNDN, "2.75406009586277478185e-01");
    114  1.1  mrg   check2("1.31706530746788241792", MPFR_RNDU, "2.75406009586277478185e-01");
    115  1.1  mrg 
    116  1.1  mrg   check2("1.47116981099449883885", MPFR_RNDD, "3.86057874110010412760e-01");
    117  1.1  mrg   check2("1.47116981099449883885", MPFR_RNDN, "3.86057874110010412760e-01");
    118  1.1  mrg   check2("1.47116981099449883885", MPFR_RNDU, "3.86057874110010468272e-01");
    119  1.1  mrg 
    120  1.1  mrg   check2("1.58405446812987782401", MPFR_RNDD, "4.59987679246663727639e-01");
    121  1.1  mrg   check2("1.58405446812987782401", MPFR_RNDN, "4.59987679246663783150e-01");
    122  1.1  mrg   check2("1.58405446812987782401", MPFR_RNDU, "4.59987679246663783150e-01");
    123  1.1  mrg 
    124  1.1  mrg   check2("1.67192331263391547047", MPFR_RNDD, "5.13974647961076613889e-01");
    125  1.1  mrg   check2("1.67192331263391547047", MPFR_RNDN, "5.13974647961076724911e-01");
    126  1.1  mrg   check2("1.67192331263391547047", MPFR_RNDU, "5.13974647961076724911e-01");
    127  1.1  mrg 
    128  1.1  mrg   check2("1.71101198068990645318", MPFR_RNDD, "5.37084997042120315669e-01");
    129  1.1  mrg   check2("1.71101198068990645318", MPFR_RNDN, "5.37084997042120315669e-01");
    130  1.1  mrg   check2("1.71101198068990645318", MPFR_RNDU, "5.37084997042120426691e-01");
    131  1.1  mrg 
    132  1.1  mrg   check2("1.72634853551388700588", MPFR_RNDD, "5.46008504786553605648e-01");
    133  1.1  mrg   check2("1.72634853551388700588", MPFR_RNDN, "5.46008504786553716670e-01");
    134  1.1  mrg   check2("1.72634853551388700588", MPFR_RNDU, "5.46008504786553716670e-01");
    135  1.1  mrg 
    136  1.1  mrg   check2("2.00028876593004323325", MPFR_RNDD, "6.93291553102749702475e-01");
    137  1.1  mrg   check2("2.00028876593004323325", MPFR_RNDN, "6.93291553102749813497e-01");
    138  1.1  mrg   check2("2.00028876593004323325", MPFR_RNDU, "6.93291553102749813497e-01");
    139  1.1  mrg 
    140  1.1  mrg   check2("6.27593230200363105808", MPFR_RNDD, "1.83672204800630312072");
    141  1.1  mrg   check2("6.27593230200363105808", MPFR_RNDN, "1.83672204800630334276");
    142  1.1  mrg   check2("6.27593230200363105808", MPFR_RNDU, "1.83672204800630334276");
    143  1.1  mrg 
    144  1.1  mrg   check2("7.47216682321367997588", MPFR_RNDD, "2.01118502712453661729");
    145  1.1  mrg   check2("7.47216682321367997588", MPFR_RNDN, "2.01118502712453706138");
    146  1.1  mrg   check2("7.47216682321367997588", MPFR_RNDU, "2.01118502712453706138");
    147  1.1  mrg 
    148  1.1  mrg   check2("9.34589857718275318632", MPFR_RNDD, "2.23493759221664944903");
    149  1.1  mrg   check2("9.34589857718275318632", MPFR_RNDN, "2.23493759221664989312");
    150  1.1  mrg   check2("9.34589857718275318632", MPFR_RNDU, "2.23493759221664989312");
    151  1.1  mrg 
    152  1.1  mrg   check2("10.6856587560831854944", MPFR_RNDD, "2.36890253928838445674");
    153  1.1  mrg   check2("10.6856587560831854944", MPFR_RNDN, "2.36890253928838445674");
    154  1.1  mrg   check2("10.6856587560831854944", MPFR_RNDU, "2.36890253928838490083");
    155  1.1  mrg 
    156  1.1  mrg   check2("12.4646345033981766903", MPFR_RNDD, "2.52289539471636015122");
    157  1.1  mrg   check2("12.4646345033981766903", MPFR_RNDN, "2.52289539471636015122");
    158  1.1  mrg   check2("12.4646345033981766903", MPFR_RNDU, "2.52289539471636059531");
    159  1.1  mrg 
    160  1.1  mrg   check2("17.0953275851761752335", MPFR_RNDD, "2.83880518553861849185");
    161  1.1  mrg   check2("17.0953275851761752335", MPFR_RNDN, "2.83880518553861893594");
    162  1.1  mrg   check2("17.0953275851761752335", MPFR_RNDU, "2.83880518553861893594");
    163  1.1  mrg 
    164  1.1  mrg   check2("19.8509496207496916043", MPFR_RNDD, "2.98825184582516722998");
    165  1.1  mrg   check2("19.8509496207496916043", MPFR_RNDN, "2.98825184582516722998");
    166  1.1  mrg   check2("19.8509496207496916043", MPFR_RNDU, "2.98825184582516767406");
    167  1.1  mrg 
    168  1.1  mrg   check2("23.9512076062771335216", MPFR_RNDD, "3.17601874455977206679");
    169  1.1  mrg   check2("23.9512076062771335216", MPFR_RNDN, "3.17601874455977206679");
    170  1.1  mrg   check2("23.9512076062771335216", MPFR_RNDU, "3.17601874455977251088");
    171  1.1  mrg 
    172  1.1  mrg   check2("428.315247165198229595", MPFR_RNDD, "6.05985948325268264369");
    173  1.1  mrg   check2("428.315247165198229595", MPFR_RNDN, "6.05985948325268353187");
    174  1.1  mrg   check2("428.315247165198229595", MPFR_RNDU, "6.05985948325268353187");
    175  1.1  mrg }
    176  1.1  mrg 
    177  1.1  mrg static void
    178  1.1  mrg special (void)
    179  1.1  mrg {
    180  1.1  mrg   mpfr_t x, y;
    181  1.1  mrg   int inex;
    182  1.1  mrg   mpfr_exp_t emin, emax;
    183  1.1  mrg 
    184  1.1  mrg   emin = mpfr_get_emin ();
    185  1.1  mrg   emax = mpfr_get_emax ();
    186  1.1  mrg 
    187  1.1  mrg   mpfr_init2 (x, 53);
    188  1.1  mrg   mpfr_init2 (y, 53);
    189  1.1  mrg 
    190  1.1  mrg   /* Check special case: An overflow in const_pi could occurs! */
    191  1.1  mrg   set_emin (-125);
    192  1.1  mrg   set_emax (128);
    193  1.1  mrg   mpfr_set_prec (y, 24*2);
    194  1.1  mrg   mpfr_set_prec (x, 24);
    195  1.1  mrg   mpfr_set_str_binary (x, "0.111110101010101011110101E0");
    196  1.1  mrg   test_log (y, x, MPFR_RNDN);
    197  1.1  mrg   set_emin (emin);
    198  1.1  mrg   set_emax (emax);
    199  1.1  mrg 
    200  1.1  mrg   mpfr_set_prec (y, 53);
    201  1.1  mrg   mpfr_set_prec (x, 53);
    202  1.1  mrg   mpfr_set_ui (x, 3, MPFR_RNDD);
    203  1.1  mrg   test_log (y, x, MPFR_RNDD);
    204  1.1  mrg   if (mpfr_cmp_str1 (y, "1.09861228866810956"))
    205  1.1  mrg     {
    206  1.1  mrg       printf ("Error in mpfr_log(3) for MPFR_RNDD\n");
    207  1.1  mrg       exit (1);
    208  1.1  mrg     }
    209  1.1  mrg 
    210  1.1  mrg   /* check large precision */
    211  1.1  mrg   mpfr_set_prec (x, 3322);
    212  1.1  mrg   mpfr_set_prec (y, 3322);
    213  1.1  mrg   mpfr_set_ui (x, 3, MPFR_RNDN);
    214  1.1  mrg   mpfr_sqrt (x, x, MPFR_RNDN);
    215  1.1  mrg   test_log (y, x, MPFR_RNDN);
    216  1.1  mrg 
    217  1.1  mrg   /* negative argument */
    218  1.1  mrg   mpfr_set_si (x, -1, MPFR_RNDN);
    219  1.1  mrg   test_log (y, x, MPFR_RNDN);
    220  1.1  mrg   MPFR_ASSERTN(mpfr_nan_p (y));
    221  1.1  mrg 
    222  1.1  mrg   /* infinite loop when  */
    223  1.1  mrg   set_emax (128);
    224  1.1  mrg   mpfr_set_prec (x, 251);
    225  1.1  mrg   mpfr_set_prec (y, 251);
    226  1.1  mrg   mpfr_set_str_binary (x, "0.10010111000000000001101E8");
    227  1.1  mrg   /* x = 4947981/32768, log(x) ~ 5.017282... */
    228  1.1  mrg   test_log (y, x, MPFR_RNDN);
    229  1.1  mrg 
    230  1.1  mrg   set_emax (emax);
    231  1.1  mrg 
    232  1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN);
    233  1.1  mrg   inex = test_log (y, x, MPFR_RNDN);
    234  1.1  mrg   MPFR_ASSERTN (inex == 0);
    235  1.1  mrg   MPFR_ASSERTN (mpfr_inf_p (y));
    236  1.1  mrg   MPFR_ASSERTN (mpfr_sgn (y) < 0);
    237  1.1  mrg 
    238  1.1  mrg   mpfr_set_ui (x, 0, MPFR_RNDN);
    239  1.1  mrg   mpfr_neg (x, x, MPFR_RNDN);
    240  1.1  mrg   inex = test_log (y, x, MPFR_RNDN);
    241  1.1  mrg   MPFR_ASSERTN (inex == 0);
    242  1.1  mrg   MPFR_ASSERTN (mpfr_inf_p (y));
    243  1.1  mrg   MPFR_ASSERTN (mpfr_sgn (y) < 0);
    244  1.1  mrg 
    245  1.1  mrg   mpfr_clear (x);
    246  1.1  mrg   mpfr_clear (y);
    247  1.1  mrg }
    248  1.1  mrg 
    249  1.1  mrg static void
    250  1.1  mrg x_near_one (void)
    251  1.1  mrg {
    252  1.1  mrg   mpfr_t x, y;
    253  1.1  mrg   int inex;
    254  1.1  mrg 
    255  1.1  mrg   mpfr_init2 (x, 32);
    256  1.1  mrg   mpfr_init2 (y, 16);
    257  1.1  mrg 
    258  1.1  mrg   mpfr_set_ui (x, 1, MPFR_RNDN);
    259  1.1  mrg   mpfr_nextbelow (x);
    260  1.1  mrg   inex = mpfr_log (y, x, MPFR_RNDD);
    261  1.1  mrg   if (mpfr_cmp_str (y, "-0.1000000000000001E-31", 2, MPFR_RNDN)
    262  1.1  mrg       || inex >= 0)
    263  1.1  mrg     {
    264  1.1  mrg       printf ("Failure in x_near_one, got inex = %d and\ny = ", inex);
    265  1.1  mrg       mpfr_dump (y);
    266  1.1  mrg     }
    267  1.1  mrg 
    268  1.1  mrg   mpfr_clears (x, y, (mpfr_ptr) 0);
    269  1.1  mrg }
    270  1.1  mrg 
    271  1.1  mrg #define TEST_FUNCTION test_log
    272  1.1  mrg #define TEST_RANDOM_POS 8
    273  1.1  mrg #include "tgeneric.c"
    274  1.1  mrg 
    275  1.1  mrg int
    276  1.1  mrg main (int argc, char *argv[])
    277  1.1  mrg {
    278  1.1  mrg   tests_start_mpfr ();
    279  1.1  mrg 
    280  1.1  mrg   if (argc==4)
    281  1.1  mrg     {   /* tlog x prec rnd */
    282  1.1  mrg       check3 (atof(argv[1]), atoi(argv[2]), (mpfr_rnd_t) atoi(argv[3]));
    283  1.1  mrg       goto done;
    284  1.1  mrg     }
    285  1.1  mrg 
    286  1.1  mrg   special ();
    287  1.1  mrg   check_worst_cases();
    288  1.1  mrg 
    289  1.1  mrg   check2("1.01979300812244555452", MPFR_RNDN, "1.95996734891603664741e-02");
    290  1.1  mrg   check2("10.0",MPFR_RNDU,"2.30258509299404590110e+00");
    291  1.1  mrg   check2("6.0",MPFR_RNDU,"1.79175946922805517936");
    292  1.1  mrg   check2("1.0",MPFR_RNDZ,"0.0");
    293  1.1  mrg   check2("62.0",MPFR_RNDU,"4.12713438504509166905");
    294  1.1  mrg   check2("0.5",MPFR_RNDZ,"-6.93147180559945286226e-01");
    295  1.1  mrg   check2("3.0",MPFR_RNDZ,"1.09861228866810956006e+00");
    296  1.1  mrg   check2("234375765.0",MPFR_RNDU,"1.92724362186836231104e+01");
    297  1.1  mrg   check2("8.0",MPFR_RNDZ,"2.07944154167983574765e+00");
    298  1.1  mrg   check2("44.0",MPFR_RNDU,"3.78418963391826146392e+00");
    299  1.1  mrg   check2("1.01979300812244555452", MPFR_RNDN, "1.95996734891603664741e-02");
    300  1.1  mrg 
    301  1.1  mrg   /* bugs found by Vincent Lefe`vre */
    302  1.1  mrg   check2("0.99999599881598921769", MPFR_RNDN, "-0.0000040011920155404072924737977900999652547398000024259090423583984375");
    303  1.1  mrg   check2("9.99995576063808955247e-01",MPFR_RNDZ,"-4.42394597667932383816e-06");
    304  1.1  mrg   check2("9.99993687357856209097e-01",MPFR_RNDN,"-6.31266206860017342601e-06");
    305  1.1  mrg   check2("9.99995223520736886691e-01",MPFR_RNDN,"-4.77649067052670982220e-06");
    306  1.1  mrg   check2("9.99993025794720935551e-01",MPFR_RNDN,"-6.97422959894716163837e-06");
    307  1.1  mrg   check2("9.99987549017837484833e-01",MPFR_RNDN,"-1.24510596766369924330e-05");
    308  1.1  mrg   check2("9.99985901426543311032e-01",MPFR_RNDN,"-1.40986728425098585229e-05");
    309  1.1  mrg   check2("9.99986053947420794330e-01",MPFR_RNDN, "-0.000013946149826301084938555592540598837558718514628708362579345703125");
    310  1.1  mrg   check2("9.99971938247442126979e-01",MPFR_RNDN,"-2.80621462962173414790e-05");
    311  1.1  mrg 
    312  1.1  mrg   /* other bugs found by Vincent Lefe`vre */
    313  1.1  mrg   check2("1.18615436389927785905e+77",MPFR_RNDN,"1.77469768607706015473e+02");
    314  1.1  mrg   check2("9.48868723578399476187e+77",MPFR_RNDZ,"1.79549152432275803903e+02");
    315  1.1  mrg   check2("2.31822210096938820854e+89",MPFR_RNDN,"2.05770873832573869322e+02");
    316  1.1  mrg 
    317  1.1  mrg   /* further bugs found by Vincent Lefe`vre */
    318  1.1  mrg   check2("9.99999989485669482647e-01",MPFR_RNDZ,"-1.05143305726283042331e-08");
    319  1.1  mrg   check2("9.99999989237970177136e-01",MPFR_RNDZ,"-1.07620298807745377934e-08");
    320  1.1  mrg   check2("9.99999989239339082125e-01",MPFR_RNDN,"-1.07606609757704445430e-08");
    321  1.1  mrg 
    322  1.1  mrg   check2("7.3890560989306504",MPFR_RNDU,"2.0000000000000004"); /* exp(2.0) */
    323  1.1  mrg   check2("7.3890560989306495",MPFR_RNDU,"2.0"); /* exp(2.0) */
    324  1.1  mrg   check2("7.53428236571286402512e+34",MPFR_RNDZ,"8.03073567492226345621e+01");
    325  1.1  mrg   check2("6.18784121531737948160e+19",MPFR_RNDZ,"4.55717030391710693493e+01");
    326  1.1  mrg   check2("1.02560267603047283735e+00",MPFR_RNDD,"2.52804164149448735987e-02");
    327  1.1  mrg   check2("7.53428236571286402512e+34",MPFR_RNDZ,"8.03073567492226345621e+01");
    328  1.1  mrg   check2("1.42470900831881198052e+49",MPFR_RNDZ,"113.180637144887668910087086260318756103515625");
    329  1.1  mrg 
    330  1.1  mrg   check2("1.08013816255293777466e+11",MPFR_RNDN,"2.54055249841782604392e+01");
    331  1.1  mrg   check2("6.72783635300509015581e-37",MPFR_RNDU,"-8.32893948416799503320e+01");
    332  1.1  mrg   check2("2.25904918906057891180e-52",MPFR_RNDU,"-1.18919480823735682406e+02");
    333  1.1  mrg   check2("1.48901209246462951085e+00",MPFR_RNDD,"3.98112874867437460668e-01");
    334  1.1  mrg   check2("1.70322470467612341327e-01",MPFR_RNDN,"-1.77006175364294615626");
    335  1.1  mrg   check2("1.94572026316065240791e+01",MPFR_RNDD,"2.96821731676437838842");
    336  1.1  mrg   check2("4.01419512207026418764e+04",MPFR_RNDD,"1.06001772315501128218e+01");
    337  1.1  mrg   check2("9.47077365236487591672e-04",MPFR_RNDZ,"-6.96212977303956748187e+00");
    338  1.1  mrg   check2("3.95906157687589643802e-109",MPFR_RNDD,"-2.49605768114704119399e+02");
    339  1.1  mrg   check2("2.73874914516503004113e-02",MPFR_RNDD,"-3.59766888618655977794e+00");
    340  1.1  mrg   check2("9.18989072589566467669e-17",MPFR_RNDZ,"-3.69258425351464083519e+01");
    341  1.1  mrg   check2("7706036453608191045959753324430048151991964994788917248.0",MPFR_RNDZ,"126.3815989984199177342816255986690521240234375");
    342  1.1  mrg   check2("1.74827399630587801934e-23",MPFR_RNDZ,"-5.24008281254547156891e+01");
    343  1.1  mrg   check2("4.35302958401482307665e+22",MPFR_RNDD,"5.21277441046519527390e+01");
    344  1.1  mrg   check2("9.70791868689332915209e+00",MPFR_RNDD,"2.27294191194272210410e+00");
    345  1.1  mrg   check2("2.22183639799464011100e-01",MPFR_RNDN,"-1.50425103275253957413e+00");
    346  1.1  mrg   check2("2.27313466156682375540e+00",MPFR_RNDD,"8.21159787095675608448e-01");
    347  1.1  mrg   check2("6.58057413965851156767e-01",MPFR_RNDZ,"-4.18463096196088235600e-01");
    348  1.1  mrg   check2 ("7.34302197248998461006e+43",MPFR_RNDZ,"101.0049094695131799426235374994575977325439453125");
    349  1.1  mrg   check2("6.09969788341579732815e+00",MPFR_RNDD,"1.80823924264386204363e+00");
    350  1.1  mrg 
    351  1.1  mrg   x_near_one ();
    352  1.1  mrg 
    353  1.1  mrg   test_generic (2, 100, 40);
    354  1.1  mrg 
    355  1.1  mrg   data_check ("data/log", mpfr_log, "mpfr_log");
    356  1.1  mrg   bad_cases (mpfr_log, mpfr_exp, "mpfr_log", 256, -30, 30, 4, 128, 800, 50);
    357  1.1  mrg 
    358  1.1  mrg  done:
    359  1.1  mrg   tests_end_mpfr ();
    360  1.1  mrg   return 0;
    361  1.1  mrg }
    362