#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 r10962 = x;
        float r10963 = exp(r10962);
        float r10964 = 2;
        float r10965 = r10963 - r10964;
        float r10966 = -r10962;
        float r10967 = exp(r10966);
        float r10968 = r10965 + r10967;
        return r10968;
}

double f_id(double x) {
        double r10969 = x;
        double r10970 = exp(r10969);
        double r10971 = 2;
        double r10972 = r10970 - r10971;
        double r10973 = -r10969;
        double r10974 = exp(r10973);
        double r10975 = r10972 + r10974;
        return r10975;
}


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

double f_od(double x) {
        double r11003 = x;
        double r11004 = exp(r11003);
        double r11005 = 2;
        double r11006 = r11004 - r11005;
        double r11007 = -r11003;
        double r11008 = exp(r11007);
        double r11009 = r11006 + r11008;
        double r11010 = 0.00361961541110823;
        bool r11011 = r11009 <= r11010;
        double r11012 = 1/360;
        double r11013 = 6;
        double r11014 = pow(r11003, r11013);
        double r11015 = 4;
        double r11016 = pow(r11003, r11015);
        double r11017 = 1/12;
        double r11018 = r11003 * r11003;
        double r11019 = fma(r11016, r11017, r11018);
        double r11020 = fma(r11012, r11014, r11019);
        double r11021 = r11005 + r11004;
        double r11022 = r11006 * r11004;
        double r11023 = fma(r11021, r11022, r11021);
        double r11024 = log(r11023);
        double r11025 = exp(r11024);
        double r11026 = r11004 + r11005;
        double r11027 = r11026 * r11004;
        double r11028 = r11025 / r11027;
        double r11029 = r11011 ? r11020 : r11028;
        return r11029;
}

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 r11030, r11031, r11032, r11033, r11034, r11035, r11036;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11030);
        mpfr_init(r11031);
        mpfr_init_set_str(r11032, "2", 10, MPFR_RNDN);
        mpfr_init(r11033);
        mpfr_init(r11034);
        mpfr_init(r11035);
        mpfr_init(r11036);
}

double f_im(double x) {
        mpfr_set_d(r11030, x, MPFR_RNDN);
        mpfr_exp(r11031, r11030, MPFR_RNDN);
        ;
        mpfr_sub(r11033, r11031, r11032, MPFR_RNDN);
        mpfr_neg(r11034, r11030, MPFR_RNDN);
        mpfr_exp(r11035, r11034, MPFR_RNDN);
        mpfr_add(r11036, r11033, 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_fm() {
        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_fm(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);
}

static mpfr_t r11064, r11065, r11066, r11067, r11068, r11069, r11070, r11071, r11072, r11073, r11074, r11075, r11076, r11077, r11078, r11079, r11080, r11081, r11082, r11083, r11084, r11085, r11086, r11087, r11088, r11089, r11090;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11064);
        mpfr_init(r11065);
        mpfr_init_set_str(r11066, "2", 10, MPFR_RNDN);
        mpfr_init(r11067);
        mpfr_init(r11068);
        mpfr_init(r11069);
        mpfr_init(r11070);
        mpfr_init_set_str(r11071, "0.00361961541110823", 10, MPFR_RNDN);
        mpfr_init(r11072);
        mpfr_init_set_str(r11073, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r11074, "6", 10, MPFR_RNDN);
        mpfr_init(r11075);
        mpfr_init_set_str(r11076, "4", 10, MPFR_RNDN);
        mpfr_init(r11077);
        mpfr_init_set_str(r11078, "1/12", 10, MPFR_RNDN);
        mpfr_init(r11079);
        mpfr_init(r11080);
        mpfr_init(r11081);
        mpfr_init(r11082);
        mpfr_init(r11083);
        mpfr_init(r11084);
        mpfr_init(r11085);
        mpfr_init(r11086);
        mpfr_init(r11087);
        mpfr_init(r11088);
        mpfr_init(r11089);
        mpfr_init(r11090);
}

double f_dm(double x) {
        mpfr_set_d(r11064, x, MPFR_RNDN);
        mpfr_exp(r11065, r11064, MPFR_RNDN);
        ;
        mpfr_sub(r11067, r11065, r11066, MPFR_RNDN);
        mpfr_neg(r11068, r11064, MPFR_RNDN);
        mpfr_exp(r11069, r11068, MPFR_RNDN);
        mpfr_add(r11070, r11067, r11069, MPFR_RNDN);
        ;
        mpfr_set_si(r11072, mpfr_cmp(r11070, r11071) <= 0, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r11075, r11064, r11074, MPFR_RNDN);
        ;
        mpfr_pow(r11077, r11064, r11076, MPFR_RNDN);
        ;
        mpfr_mul(r11079, r11064, r11064, MPFR_RNDN);
        mpfr_fma(r11080, r11077, r11078, r11079, MPFR_RNDN);
        mpfr_fma(r11081, r11073, r11075, r11080, MPFR_RNDN);
        mpfr_add(r11082, r11066, r11065, MPFR_RNDN);
        mpfr_mul(r11083, r11067, r11065, MPFR_RNDN);
        mpfr_fma(r11084, r11082, r11083, r11082, MPFR_RNDN);
        mpfr_log(r11085, r11084, MPFR_RNDN);
        mpfr_exp(r11086, r11085, MPFR_RNDN);
        mpfr_add(r11087, r11065, r11066, MPFR_RNDN);
        mpfr_mul(r11088, r11087, r11065, MPFR_RNDN);
        mpfr_div(r11089, r11086, r11088, MPFR_RNDN);
        if (mpfr_get_si(r11072, MPFR_RNDN)) { mpfr_set(r11090, r11081, MPFR_RNDN); } else { mpfr_set(r11090, r11089, MPFR_RNDN); };
        return mpfr_get_d(r11090, MPFR_RNDN);
}

