#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 r10935 = x;
        float r10936 = exp(r10935);
        float r10937 = 2;
        float r10938 = r10936 - r10937;
        float r10939 = -r10935;
        float r10940 = exp(r10939);
        float r10941 = r10938 + r10940;
        return r10941;
}

double f_id(double x) {
        double r10942 = x;
        double r10943 = exp(r10942);
        double r10944 = 2;
        double r10945 = r10943 - r10944;
        double r10946 = -r10942;
        double r10947 = exp(r10946);
        double r10948 = r10945 + r10947;
        return r10948;
}


double f_of(float x) {
        float r10949 = x;
        float r10950 = exp(r10949);
        float r10951 = 2;
        float r10952 = r10950 - r10951;
        float r10953 = -r10949;
        float r10954 = exp(r10953);
        float r10955 = r10952 + r10954;
        float r10956 = 0.00361961541110823;
        bool r10957 = r10955 <= r10956;
        float r10958 = 1/360;
        float r10959 = 6;
        float r10960 = pow(r10949, r10959);
        float r10961 = 4;
        float r10962 = pow(r10949, r10961);
        float r10963 = 1/12;
        float r10964 = r10949 * r10949;
        float r10965 = fma(r10962, r10963, r10964);
        float r10966 = fma(r10958, r10960, r10965);
        float r10967 = r10951 + r10950;
        float r10968 = r10952 * r10950;
        float r10969 = fma(r10967, r10968, r10967);
        float r10970 = log(r10969);
        float r10971 = exp(r10970);
        float r10972 = r10950 + r10951;
        float r10973 = r10972 * r10950;
        float r10974 = r10971 / r10973;
        float r10975 = r10957 ? r10966 : r10974;
        return r10975;
}

double f_od(double x) {
        double r10976 = x;
        double r10977 = exp(r10976);
        double r10978 = 2;
        double r10979 = r10977 - r10978;
        double r10980 = -r10976;
        double r10981 = exp(r10980);
        double r10982 = r10979 + r10981;
        double r10983 = 0.00361961541110823;
        bool r10984 = r10982 <= r10983;
        double r10985 = 1/360;
        double r10986 = 6;
        double r10987 = pow(r10976, r10986);
        double r10988 = 4;
        double r10989 = pow(r10976, r10988);
        double r10990 = 1/12;
        double r10991 = r10976 * r10976;
        double r10992 = fma(r10989, r10990, r10991);
        double r10993 = fma(r10985, r10987, r10992);
        double r10994 = r10978 + r10977;
        double r10995 = r10979 * r10977;
        double r10996 = fma(r10994, r10995, r10994);
        double r10997 = log(r10996);
        double r10998 = exp(r10997);
        double r10999 = r10977 + r10978;
        double r11000 = r10999 * r10977;
        double r11001 = r10998 / r11000;
        double r11002 = r10984 ? r10993 : r11001;
        return r11002;
}

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 r11003, r11004, r11005, r11006, r11007, r11008, r11009;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11003);
        mpfr_init(r11004);
        mpfr_init_set_str(r11005, "2", 10, MPFR_RNDN);
        mpfr_init(r11006);
        mpfr_init(r11007);
        mpfr_init(r11008);
        mpfr_init(r11009);
}

double f_im(double x) {
        mpfr_set_d(r11003, x, MPFR_RNDN);
        mpfr_exp(r11004, r11003, MPFR_RNDN);
        ;
        mpfr_sub(r11006, r11004, r11005, MPFR_RNDN);
        mpfr_neg(r11007, r11003, MPFR_RNDN);
        mpfr_exp(r11008, r11007, MPFR_RNDN);
        mpfr_add(r11009, r11006, r11008, MPFR_RNDN);
        return mpfr_get_d(r11009, MPFR_RNDN);
}

static mpfr_t r11010, r11011, r11012, r11013, r11014, r11015, r11016, r11017, r11018, r11019, r11020, r11021, r11022, r11023, r11024, r11025, r11026, r11027, r11028, r11029, r11030, r11031, r11032, r11033, r11034, r11035, r11036;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11010);
        mpfr_init(r11011);
        mpfr_init_set_str(r11012, "2", 10, MPFR_RNDN);
        mpfr_init(r11013);
        mpfr_init(r11014);
        mpfr_init(r11015);
        mpfr_init(r11016);
        mpfr_init_set_str(r11017, "0.00361961541110823", 10, MPFR_RNDN);
        mpfr_init(r11018);
        mpfr_init_set_str(r11019, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r11020, "6", 10, MPFR_RNDN);
        mpfr_init(r11021);
        mpfr_init_set_str(r11022, "4", 10, MPFR_RNDN);
        mpfr_init(r11023);
        mpfr_init_set_str(r11024, "1/12", 10, MPFR_RNDN);
        mpfr_init(r11025);
        mpfr_init(r11026);
        mpfr_init(r11027);
        mpfr_init(r11028);
        mpfr_init(r11029);
        mpfr_init(r11030);
        mpfr_init(r11031);
        mpfr_init(r11032);
        mpfr_init(r11033);
        mpfr_init(r11034);
        mpfr_init(r11035);
        mpfr_init(r11036);
}

double f_fm(double x) {
        mpfr_set_d(r11010, x, MPFR_RNDN);
        mpfr_exp(r11011, r11010, MPFR_RNDN);
        ;
        mpfr_sub(r11013, r11011, r11012, MPFR_RNDN);
        mpfr_neg(r11014, r11010, MPFR_RNDN);
        mpfr_exp(r11015, r11014, MPFR_RNDN);
        mpfr_add(r11016, r11013, r11015, MPFR_RNDN);
        ;
        mpfr_set_si(r11018, mpfr_cmp(r11016, r11017) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11021, r11010, r11020, MPFR_RNDN);
        ;
        mpfr_pow(r11023, r11010, r11022, MPFR_RNDN);
        ;
        mpfr_mul(r11025, r11010, r11010, MPFR_RNDN);
        mpfr_fma(r11026, r11023, r11024, r11025, MPFR_RNDN);
        mpfr_fma(r11027, r11019, r11021, r11026, MPFR_RNDN);
        mpfr_add(r11028, r11012, r11011, MPFR_RNDN);
        mpfr_mul(r11029, r11013, r11011, MPFR_RNDN);
        mpfr_fma(r11030, r11028, r11029, r11028, MPFR_RNDN);
        mpfr_log(r11031, r11030, MPFR_RNDN);
        mpfr_exp(r11032, r11031, MPFR_RNDN);
        mpfr_add(r11033, r11011, r11012, MPFR_RNDN);
        mpfr_mul(r11034, r11033, r11011, MPFR_RNDN);
        mpfr_div(r11035, r11032, r11034, MPFR_RNDN);
        if (mpfr_get_si(r11018, MPFR_RNDN)) { mpfr_set(r11036, r11027, MPFR_RNDN); } else { mpfr_set(r11036, r11035, MPFR_RNDN); };
        return mpfr_get_d(r11036, MPFR_RNDN);
}

static mpfr_t r11037, r11038, r11039, r11040, r11041, r11042, r11043, r11044, r11045, r11046, r11047, r11048, r11049, r11050, r11051, r11052, r11053, r11054, r11055, r11056, r11057, r11058, r11059, r11060, r11061, r11062, r11063;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11037);
        mpfr_init(r11038);
        mpfr_init_set_str(r11039, "2", 10, MPFR_RNDN);
        mpfr_init(r11040);
        mpfr_init(r11041);
        mpfr_init(r11042);
        mpfr_init(r11043);
        mpfr_init_set_str(r11044, "0.00361961541110823", 10, MPFR_RNDN);
        mpfr_init(r11045);
        mpfr_init_set_str(r11046, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r11047, "6", 10, MPFR_RNDN);
        mpfr_init(r11048);
        mpfr_init_set_str(r11049, "4", 10, MPFR_RNDN);
        mpfr_init(r11050);
        mpfr_init_set_str(r11051, "1/12", 10, MPFR_RNDN);
        mpfr_init(r11052);
        mpfr_init(r11053);
        mpfr_init(r11054);
        mpfr_init(r11055);
        mpfr_init(r11056);
        mpfr_init(r11057);
        mpfr_init(r11058);
        mpfr_init(r11059);
        mpfr_init(r11060);
        mpfr_init(r11061);
        mpfr_init(r11062);
        mpfr_init(r11063);
}

double f_dm(double x) {
        mpfr_set_d(r11037, x, MPFR_RNDN);
        mpfr_exp(r11038, r11037, MPFR_RNDN);
        ;
        mpfr_sub(r11040, r11038, r11039, MPFR_RNDN);
        mpfr_neg(r11041, r11037, MPFR_RNDN);
        mpfr_exp(r11042, r11041, MPFR_RNDN);
        mpfr_add(r11043, r11040, r11042, MPFR_RNDN);
        ;
        mpfr_set_si(r11045, mpfr_cmp(r11043, r11044) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11048, r11037, r11047, MPFR_RNDN);
        ;
        mpfr_pow(r11050, r11037, r11049, MPFR_RNDN);
        ;
        mpfr_mul(r11052, r11037, r11037, MPFR_RNDN);
        mpfr_fma(r11053, r11050, r11051, r11052, MPFR_RNDN);
        mpfr_fma(r11054, r11046, r11048, r11053, MPFR_RNDN);
        mpfr_add(r11055, r11039, r11038, MPFR_RNDN);
        mpfr_mul(r11056, r11040, r11038, MPFR_RNDN);
        mpfr_fma(r11057, r11055, r11056, r11055, MPFR_RNDN);
        mpfr_log(r11058, r11057, MPFR_RNDN);
        mpfr_exp(r11059, r11058, MPFR_RNDN);
        mpfr_add(r11060, r11038, r11039, MPFR_RNDN);
        mpfr_mul(r11061, r11060, r11038, MPFR_RNDN);
        mpfr_div(r11062, r11059, r11061, MPFR_RNDN);
        if (mpfr_get_si(r11045, MPFR_RNDN)) { mpfr_set(r11063, r11054, MPFR_RNDN); } else { mpfr_set(r11063, r11062, MPFR_RNDN); };
        return mpfr_get_d(r11063, MPFR_RNDN);
}

