#include <tgmath.h>
#include <gmp.h>
#include <mpfr.h>
#include <stdio.h>
#include <stdbool.h>

char *name = "2log (problem 3.3.6)";

double f_if(float N) {
        float r11870651 = N;
        float r11870652 = 1;
        float r11870653 = r11870651 + r11870652;
        float r11870654 = log(r11870653);
        float r11870655 = log(r11870651);
        float r11870656 = r11870654 - r11870655;
        return r11870656;
}

double f_id(double N) {
        double r11870657 = N;
        double r11870658 = 1;
        double r11870659 = r11870657 + r11870658;
        double r11870660 = log(r11870659);
        double r11870661 = log(r11870657);
        double r11870662 = r11870660 - r11870661;
        return r11870662;
}


double f_of(float N) {
        float r11870663 = N;
        float r11870664 = 1;
        float r11870665 = r11870663 + r11870664;
        float r11870666 = log(r11870665);
        float r11870667 = log(r11870663);
        float r11870668 = r11870666 - r11870667;
        float r11870669 = 8.081923095204502e-07;
        bool r11870670 = r11870668 <= r11870669;
        float r11870671 = r11870664 / r11870663;
        float r11870672 = 1/3;
        float r11870673 = r11870672 / r11870663;
        float r11870674 = 1/2;
        float r11870675 = r11870673 - r11870674;
        float r11870676 = r11870663 * r11870663;
        float r11870677 = r11870664 / r11870676;
        float r11870678 = r11870675 * r11870677;
        float r11870679 = r11870671 + r11870678;
        float r11870680 = r11870665 / r11870663;
        float r11870681 = log(r11870680);
        float r11870682 = r11870670 ? r11870679 : r11870681;
        return r11870682;
}

double f_od(double N) {
        double r11870683 = N;
        double r11870684 = 1;
        double r11870685 = r11870683 + r11870684;
        double r11870686 = log(r11870685);
        double r11870687 = log(r11870683);
        double r11870688 = r11870686 - r11870687;
        double r11870689 = 8.081923095204502e-07;
        bool r11870690 = r11870688 <= r11870689;
        double r11870691 = r11870684 / r11870683;
        double r11870692 = 1/3;
        double r11870693 = r11870692 / r11870683;
        double r11870694 = 1/2;
        double r11870695 = r11870693 - r11870694;
        double r11870696 = r11870683 * r11870683;
        double r11870697 = r11870684 / r11870696;
        double r11870698 = r11870695 * r11870697;
        double r11870699 = r11870691 + r11870698;
        double r11870700 = r11870685 / r11870683;
        double r11870701 = log(r11870700);
        double r11870702 = r11870690 ? r11870699 : r11870701;
        return r11870702;
}

void mpfr_fmod2(mpfr_t r, mpfr_t n, mpfr_t d, mpfr_rnd_t rmd) {
        mpfr_fmod(r, n, d, rmd);
        if (mpfr_cmp_ui(r, 0) < 0) mpfr_add(r, r, d, rmd);
}


static mpfr_t r11870703, r11870704, r11870705, r11870706, r11870707, r11870708;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11870703);
        mpfr_init_set_str(r11870704, "1", 10, MPFR_RNDN);
        mpfr_init(r11870705);
        mpfr_init(r11870706);
        mpfr_init(r11870707);
        mpfr_init(r11870708);
}

double f_im(double N) {
        mpfr_set_d(r11870703, N, MPFR_RNDN);
        ;
        mpfr_add(r11870705, r11870703, r11870704, MPFR_RNDN);
        mpfr_log(r11870706, r11870705, MPFR_RNDN);
        mpfr_log(r11870707, r11870703, MPFR_RNDN);
        mpfr_sub(r11870708, r11870706, r11870707, MPFR_RNDN);
        return mpfr_get_d(r11870708, MPFR_RNDN);
}

static mpfr_t r11870709, r11870710, r11870711, r11870712, r11870713, r11870714, r11870715, r11870716, r11870717, r11870718, r11870719, r11870720, r11870721, r11870722, r11870723, r11870724, r11870725, r11870726, r11870727, r11870728;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11870709);
        mpfr_init_set_str(r11870710, "1", 10, MPFR_RNDN);
        mpfr_init(r11870711);
        mpfr_init(r11870712);
        mpfr_init(r11870713);
        mpfr_init(r11870714);
        mpfr_init_set_str(r11870715, "8.081923095204502e-07", 10, MPFR_RNDN);
        mpfr_init(r11870716);
        mpfr_init(r11870717);
        mpfr_init_set_str(r11870718, "1/3", 10, MPFR_RNDN);
        mpfr_init(r11870719);
        mpfr_init_set_str(r11870720, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11870721);
        mpfr_init(r11870722);
        mpfr_init(r11870723);
        mpfr_init(r11870724);
        mpfr_init(r11870725);
        mpfr_init(r11870726);
        mpfr_init(r11870727);
        mpfr_init(r11870728);
}

double f_fm(double N) {
        mpfr_set_d(r11870709, N, MPFR_RNDN);
        ;
        mpfr_add(r11870711, r11870709, r11870710, MPFR_RNDN);
        mpfr_log(r11870712, r11870711, MPFR_RNDN);
        mpfr_log(r11870713, r11870709, MPFR_RNDN);
        mpfr_sub(r11870714, r11870712, r11870713, MPFR_RNDN);
        ;
        mpfr_set_si(r11870716, mpfr_cmp(r11870714, r11870715) <= 0, MPFR_RNDN);
        mpfr_div(r11870717, r11870710, r11870709, MPFR_RNDN);
        ;
        mpfr_div(r11870719, r11870718, r11870709, MPFR_RNDN);
        ;
        mpfr_sub(r11870721, r11870719, r11870720, MPFR_RNDN);
        mpfr_mul(r11870722, r11870709, r11870709, MPFR_RNDN);
        mpfr_div(r11870723, r11870710, r11870722, MPFR_RNDN);
        mpfr_mul(r11870724, r11870721, r11870723, MPFR_RNDN);
        mpfr_add(r11870725, r11870717, r11870724, MPFR_RNDN);
        mpfr_div(r11870726, r11870711, r11870709, MPFR_RNDN);
        mpfr_log(r11870727, r11870726, MPFR_RNDN);
        if (mpfr_get_si(r11870716, MPFR_RNDN)) { mpfr_set(r11870728, r11870725, MPFR_RNDN); } else { mpfr_set(r11870728, r11870727, MPFR_RNDN); };
        return mpfr_get_d(r11870728, MPFR_RNDN);
}

static mpfr_t r11870729, r11870730, r11870731, r11870732, r11870733, r11870734, r11870735, r11870736, r11870737, r11870738, r11870739, r11870740, r11870741, r11870742, r11870743, r11870744, r11870745, r11870746, r11870747, r11870748;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11870729);
        mpfr_init_set_str(r11870730, "1", 10, MPFR_RNDN);
        mpfr_init(r11870731);
        mpfr_init(r11870732);
        mpfr_init(r11870733);
        mpfr_init(r11870734);
        mpfr_init_set_str(r11870735, "8.081923095204502e-07", 10, MPFR_RNDN);
        mpfr_init(r11870736);
        mpfr_init(r11870737);
        mpfr_init_set_str(r11870738, "1/3", 10, MPFR_RNDN);
        mpfr_init(r11870739);
        mpfr_init_set_str(r11870740, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11870741);
        mpfr_init(r11870742);
        mpfr_init(r11870743);
        mpfr_init(r11870744);
        mpfr_init(r11870745);
        mpfr_init(r11870746);
        mpfr_init(r11870747);
        mpfr_init(r11870748);
}

double f_dm(double N) {
        mpfr_set_d(r11870729, N, MPFR_RNDN);
        ;
        mpfr_add(r11870731, r11870729, r11870730, MPFR_RNDN);
        mpfr_log(r11870732, r11870731, MPFR_RNDN);
        mpfr_log(r11870733, r11870729, MPFR_RNDN);
        mpfr_sub(r11870734, r11870732, r11870733, MPFR_RNDN);
        ;
        mpfr_set_si(r11870736, mpfr_cmp(r11870734, r11870735) <= 0, MPFR_RNDN);
        mpfr_div(r11870737, r11870730, r11870729, MPFR_RNDN);
        ;
        mpfr_div(r11870739, r11870738, r11870729, MPFR_RNDN);
        ;
        mpfr_sub(r11870741, r11870739, r11870740, MPFR_RNDN);
        mpfr_mul(r11870742, r11870729, r11870729, MPFR_RNDN);
        mpfr_div(r11870743, r11870730, r11870742, MPFR_RNDN);
        mpfr_mul(r11870744, r11870741, r11870743, MPFR_RNDN);
        mpfr_add(r11870745, r11870737, r11870744, MPFR_RNDN);
        mpfr_div(r11870746, r11870731, r11870729, MPFR_RNDN);
        mpfr_log(r11870747, r11870746, MPFR_RNDN);
        if (mpfr_get_si(r11870736, MPFR_RNDN)) { mpfr_set(r11870748, r11870745, MPFR_RNDN); } else { mpfr_set(r11870748, r11870747, MPFR_RNDN); };
        return mpfr_get_d(r11870748, MPFR_RNDN);
}

