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

char *name = "exp2 (problem 3.3.7)";

double f_if(float x) {
        float r11872085 = x;
        float r11872086 = exp(r11872085);
        float r11872087 = 2;
        float r11872088 = r11872086 - r11872087;
        float r11872089 = -r11872085;
        float r11872090 = exp(r11872089);
        float r11872091 = r11872088 + r11872090;
        return r11872091;
}

double f_id(double x) {
        double r11872092 = x;
        double r11872093 = exp(r11872092);
        double r11872094 = 2;
        double r11872095 = r11872093 - r11872094;
        double r11872096 = -r11872092;
        double r11872097 = exp(r11872096);
        double r11872098 = r11872095 + r11872097;
        return r11872098;
}


double f_of(float x) {
        float r11872099 = x;
        float r11872100 = exp(r11872099);
        float r11872101 = 2;
        float r11872102 = r11872100 - r11872101;
        float r11872103 = -r11872099;
        float r11872104 = exp(r11872103);
        float r11872105 = r11872102 + r11872104;
        float r11872106 = 0.13163264838209376;
        bool r11872107 = r11872105 <= r11872106;
        float r11872108 = pow(r11872099, r11872101);
        float r11872109 = 1/12;
        float r11872110 = 4;
        float r11872111 = pow(r11872099, r11872110);
        float r11872112 = r11872109 * r11872111;
        float r11872113 = 1/360;
        float r11872114 = 6;
        float r11872115 = pow(r11872099, r11872114);
        float r11872116 = r11872113 * r11872115;
        float r11872117 = r11872112 + r11872116;
        float r11872118 = r11872108 + r11872117;
        float r11872119 = 3;
        float r11872120 = pow(r11872100, r11872119);
        float r11872121 = pow(r11872101, r11872119);
        float r11872122 = r11872120 - r11872121;
        float r11872123 = r11872101 * r11872101;
        float r11872124 = r11872101 + r11872100;
        float r11872125 = r11872100 * r11872124;
        float r11872126 = r11872123 + r11872125;
        float r11872127 = r11872122 / r11872126;
        float r11872128 = r11872127 + r11872104;
        float r11872129 = r11872107 ? r11872118 : r11872128;
        return r11872129;
}

double f_od(double x) {
        double r11872130 = x;
        double r11872131 = exp(r11872130);
        double r11872132 = 2;
        double r11872133 = r11872131 - r11872132;
        double r11872134 = -r11872130;
        double r11872135 = exp(r11872134);
        double r11872136 = r11872133 + r11872135;
        double r11872137 = 0.13163264838209376;
        bool r11872138 = r11872136 <= r11872137;
        double r11872139 = pow(r11872130, r11872132);
        double r11872140 = 1/12;
        double r11872141 = 4;
        double r11872142 = pow(r11872130, r11872141);
        double r11872143 = r11872140 * r11872142;
        double r11872144 = 1/360;
        double r11872145 = 6;
        double r11872146 = pow(r11872130, r11872145);
        double r11872147 = r11872144 * r11872146;
        double r11872148 = r11872143 + r11872147;
        double r11872149 = r11872139 + r11872148;
        double r11872150 = 3;
        double r11872151 = pow(r11872131, r11872150);
        double r11872152 = pow(r11872132, r11872150);
        double r11872153 = r11872151 - r11872152;
        double r11872154 = r11872132 * r11872132;
        double r11872155 = r11872132 + r11872131;
        double r11872156 = r11872131 * r11872155;
        double r11872157 = r11872154 + r11872156;
        double r11872158 = r11872153 / r11872157;
        double r11872159 = r11872158 + r11872135;
        double r11872160 = r11872138 ? r11872149 : r11872159;
        return r11872160;
}

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 r11872161, r11872162, r11872163, r11872164, r11872165, r11872166, r11872167;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11872161);
        mpfr_init(r11872162);
        mpfr_init_set_str(r11872163, "2", 10, MPFR_RNDN);
        mpfr_init(r11872164);
        mpfr_init(r11872165);
        mpfr_init(r11872166);
        mpfr_init(r11872167);
}

double f_im(double x) {
        mpfr_set_d(r11872161, x, MPFR_RNDN);
        mpfr_exp(r11872162, r11872161, MPFR_RNDN);
        ;
        mpfr_sub(r11872164, r11872162, r11872163, MPFR_RNDN);
        mpfr_neg(r11872165, r11872161, MPFR_RNDN);
        mpfr_exp(r11872166, r11872165, MPFR_RNDN);
        mpfr_add(r11872167, r11872164, r11872166, MPFR_RNDN);
        return mpfr_get_d(r11872167, MPFR_RNDN);
}

static mpfr_t r11872168, r11872169, r11872170, r11872171, r11872172, r11872173, r11872174, r11872175, r11872176, r11872177, r11872178, r11872179, r11872180, r11872181, r11872182, r11872183, r11872184, r11872185, r11872186, r11872187, r11872188, r11872189, r11872190, r11872191, r11872192, r11872193, r11872194, r11872195, r11872196, r11872197, r11872198;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11872168);
        mpfr_init(r11872169);
        mpfr_init_set_str(r11872170, "2", 10, MPFR_RNDN);
        mpfr_init(r11872171);
        mpfr_init(r11872172);
        mpfr_init(r11872173);
        mpfr_init(r11872174);
        mpfr_init_set_str(r11872175, "0.13163264838209376", 10, MPFR_RNDN);
        mpfr_init(r11872176);
        mpfr_init(r11872177);
        mpfr_init_set_str(r11872178, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r11872179, "4", 10, MPFR_RNDN);
        mpfr_init(r11872180);
        mpfr_init(r11872181);
        mpfr_init_set_str(r11872182, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r11872183, "6", 10, MPFR_RNDN);
        mpfr_init(r11872184);
        mpfr_init(r11872185);
        mpfr_init(r11872186);
        mpfr_init(r11872187);
        mpfr_init_set_str(r11872188, "3", 10, MPFR_RNDN);
        mpfr_init(r11872189);
        mpfr_init(r11872190);
        mpfr_init(r11872191);
        mpfr_init(r11872192);
        mpfr_init(r11872193);
        mpfr_init(r11872194);
        mpfr_init(r11872195);
        mpfr_init(r11872196);
        mpfr_init(r11872197);
        mpfr_init(r11872198);
}

double f_fm(double x) {
        mpfr_set_d(r11872168, x, MPFR_RNDN);
        mpfr_exp(r11872169, r11872168, MPFR_RNDN);
        ;
        mpfr_sub(r11872171, r11872169, r11872170, MPFR_RNDN);
        mpfr_neg(r11872172, r11872168, MPFR_RNDN);
        mpfr_exp(r11872173, r11872172, MPFR_RNDN);
        mpfr_add(r11872174, r11872171, r11872173, MPFR_RNDN);
        ;
        mpfr_set_si(r11872176, mpfr_cmp(r11872174, r11872175) <= 0, MPFR_RNDN);
        mpfr_pow(r11872177, r11872168, r11872170, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11872180, r11872168, r11872179, MPFR_RNDN);
        mpfr_mul(r11872181, r11872178, r11872180, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11872184, r11872168, r11872183, MPFR_RNDN);
        mpfr_mul(r11872185, r11872182, r11872184, MPFR_RNDN);
        mpfr_add(r11872186, r11872181, r11872185, MPFR_RNDN);
        mpfr_add(r11872187, r11872177, r11872186, MPFR_RNDN);
        ;
        mpfr_pow(r11872189, r11872169, r11872188, MPFR_RNDN);
        mpfr_pow(r11872190, r11872170, r11872188, MPFR_RNDN);
        mpfr_sub(r11872191, r11872189, r11872190, MPFR_RNDN);
        mpfr_mul(r11872192, r11872170, r11872170, MPFR_RNDN);
        mpfr_add(r11872193, r11872170, r11872169, MPFR_RNDN);
        mpfr_mul(r11872194, r11872169, r11872193, MPFR_RNDN);
        mpfr_add(r11872195, r11872192, r11872194, MPFR_RNDN);
        mpfr_div(r11872196, r11872191, r11872195, MPFR_RNDN);
        mpfr_add(r11872197, r11872196, r11872173, MPFR_RNDN);
        if (mpfr_get_si(r11872176, MPFR_RNDN)) { mpfr_set(r11872198, r11872187, MPFR_RNDN); } else { mpfr_set(r11872198, r11872197, MPFR_RNDN); };
        return mpfr_get_d(r11872198, MPFR_RNDN);
}

static mpfr_t r11872199, r11872200, r11872201, r11872202, r11872203, r11872204, r11872205, r11872206, r11872207, r11872208, r11872209, r11872210, r11872211, r11872212, r11872213, r11872214, r11872215, r11872216, r11872217, r11872218, r11872219, r11872220, r11872221, r11872222, r11872223, r11872224, r11872225, r11872226, r11872227, r11872228, r11872229;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11872199);
        mpfr_init(r11872200);
        mpfr_init_set_str(r11872201, "2", 10, MPFR_RNDN);
        mpfr_init(r11872202);
        mpfr_init(r11872203);
        mpfr_init(r11872204);
        mpfr_init(r11872205);
        mpfr_init_set_str(r11872206, "0.13163264838209376", 10, MPFR_RNDN);
        mpfr_init(r11872207);
        mpfr_init(r11872208);
        mpfr_init_set_str(r11872209, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r11872210, "4", 10, MPFR_RNDN);
        mpfr_init(r11872211);
        mpfr_init(r11872212);
        mpfr_init_set_str(r11872213, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r11872214, "6", 10, MPFR_RNDN);
        mpfr_init(r11872215);
        mpfr_init(r11872216);
        mpfr_init(r11872217);
        mpfr_init(r11872218);
        mpfr_init_set_str(r11872219, "3", 10, MPFR_RNDN);
        mpfr_init(r11872220);
        mpfr_init(r11872221);
        mpfr_init(r11872222);
        mpfr_init(r11872223);
        mpfr_init(r11872224);
        mpfr_init(r11872225);
        mpfr_init(r11872226);
        mpfr_init(r11872227);
        mpfr_init(r11872228);
        mpfr_init(r11872229);
}

double f_dm(double x) {
        mpfr_set_d(r11872199, x, MPFR_RNDN);
        mpfr_exp(r11872200, r11872199, MPFR_RNDN);
        ;
        mpfr_sub(r11872202, r11872200, r11872201, MPFR_RNDN);
        mpfr_neg(r11872203, r11872199, MPFR_RNDN);
        mpfr_exp(r11872204, r11872203, MPFR_RNDN);
        mpfr_add(r11872205, r11872202, r11872204, MPFR_RNDN);
        ;
        mpfr_set_si(r11872207, mpfr_cmp(r11872205, r11872206) <= 0, MPFR_RNDN);
        mpfr_pow(r11872208, r11872199, r11872201, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11872211, r11872199, r11872210, MPFR_RNDN);
        mpfr_mul(r11872212, r11872209, r11872211, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11872215, r11872199, r11872214, MPFR_RNDN);
        mpfr_mul(r11872216, r11872213, r11872215, MPFR_RNDN);
        mpfr_add(r11872217, r11872212, r11872216, MPFR_RNDN);
        mpfr_add(r11872218, r11872208, r11872217, MPFR_RNDN);
        ;
        mpfr_pow(r11872220, r11872200, r11872219, MPFR_RNDN);
        mpfr_pow(r11872221, r11872201, r11872219, MPFR_RNDN);
        mpfr_sub(r11872222, r11872220, r11872221, MPFR_RNDN);
        mpfr_mul(r11872223, r11872201, r11872201, MPFR_RNDN);
        mpfr_add(r11872224, r11872201, r11872200, MPFR_RNDN);
        mpfr_mul(r11872225, r11872200, r11872224, MPFR_RNDN);
        mpfr_add(r11872226, r11872223, r11872225, MPFR_RNDN);
        mpfr_div(r11872227, r11872222, r11872226, MPFR_RNDN);
        mpfr_add(r11872228, r11872227, r11872204, MPFR_RNDN);
        if (mpfr_get_si(r11872207, MPFR_RNDN)) { mpfr_set(r11872229, r11872218, MPFR_RNDN); } else { mpfr_set(r11872229, r11872228, MPFR_RNDN); };
        return mpfr_get_d(r11872229, MPFR_RNDN);
}

