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

char *name = "expax (section 3.5)";

double f_if(float a, float x) {
        float r11871959 = a;
        float r11871960 = x;
        float r11871961 = r11871959 * r11871960;
        float r11871962 = exp(r11871961);
        float r11871963 = 1;
        float r11871964 = r11871962 - r11871963;
        return r11871964;
}

double f_id(double a, double x) {
        double r11871965 = a;
        double r11871966 = x;
        double r11871967 = r11871965 * r11871966;
        double r11871968 = exp(r11871967);
        double r11871969 = 1;
        double r11871970 = r11871968 - r11871969;
        return r11871970;
}


double f_of(float a, float x) {
        float r11871971 = a;
        float r11871972 = x;
        float r11871973 = r11871971 * r11871972;
        float r11871974 = exp(r11871973);
        float r11871975 = 1;
        float r11871976 = r11871974 - r11871975;
        float r11871977 = -5.697442517768994e-12;
        bool r11871978 = r11871976 <= r11871977;
        float r11871979 = r11871976 * r11871974;
        float r11871980 = sqrt(r11871974);
        float r11871981 = r11871979 * r11871980;
        float r11871982 = r11871976 + r11871981;
        float r11871983 = r11871980 + r11871975;
        float r11871984 = r11871975 + r11871974;
        float r11871985 = r11871984 - r11871980;
        float r11871986 = r11871983 * r11871985;
        float r11871987 = r11871982 / r11871986;
        float r11871988 = 1/8;
        float r11871989 = r11871988 * r11871972;
        float r11871990 = r11871973 * r11871989;
        float r11871991 = r11871971 * r11871990;
        float r11871992 = 1/2;
        float r11871993 = r11871992 * r11871972;
        float r11871994 = r11871971 * r11871993;
        float r11871995 = r11871991 + r11871994;
        float r11871996 = r11871995 * r11871983;
        float r11871997 = r11871978 ? r11871987 : r11871996;
        return r11871997;
}

double f_od(double a, double x) {
        double r11871998 = a;
        double r11871999 = x;
        double r11872000 = r11871998 * r11871999;
        double r11872001 = exp(r11872000);
        double r11872002 = 1;
        double r11872003 = r11872001 - r11872002;
        double r11872004 = -5.697442517768994e-12;
        bool r11872005 = r11872003 <= r11872004;
        double r11872006 = r11872003 * r11872001;
        double r11872007 = sqrt(r11872001);
        double r11872008 = r11872006 * r11872007;
        double r11872009 = r11872003 + r11872008;
        double r11872010 = r11872007 + r11872002;
        double r11872011 = r11872002 + r11872001;
        double r11872012 = r11872011 - r11872007;
        double r11872013 = r11872010 * r11872012;
        double r11872014 = r11872009 / r11872013;
        double r11872015 = 1/8;
        double r11872016 = r11872015 * r11871999;
        double r11872017 = r11872000 * r11872016;
        double r11872018 = r11871998 * r11872017;
        double r11872019 = 1/2;
        double r11872020 = r11872019 * r11871999;
        double r11872021 = r11871998 * r11872020;
        double r11872022 = r11872018 + r11872021;
        double r11872023 = r11872022 * r11872010;
        double r11872024 = r11872005 ? r11872014 : r11872023;
        return r11872024;
}

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 r11872025, r11872026, r11872027, r11872028, r11872029, r11872030;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11872025);
        mpfr_init(r11872026);
        mpfr_init(r11872027);
        mpfr_init(r11872028);
        mpfr_init_set_str(r11872029, "1", 10, MPFR_RNDN);
        mpfr_init(r11872030);
}

double f_im(double a, double x) {
        mpfr_set_d(r11872025, a, MPFR_RNDN);
        mpfr_set_d(r11872026, x, MPFR_RNDN);
        mpfr_mul(r11872027, r11872025, r11872026, MPFR_RNDN);
        mpfr_exp(r11872028, r11872027, MPFR_RNDN);
        ;
        mpfr_sub(r11872030, r11872028, r11872029, MPFR_RNDN);
        return mpfr_get_d(r11872030, MPFR_RNDN);
}

static mpfr_t r11872031, r11872032, r11872033, r11872034, r11872035, r11872036, r11872037, r11872038, r11872039, r11872040, r11872041, r11872042, r11872043, r11872044, r11872045, r11872046, r11872047, r11872048, r11872049, r11872050, r11872051, r11872052, r11872053, r11872054, r11872055, r11872056, r11872057;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11872031);
        mpfr_init(r11872032);
        mpfr_init(r11872033);
        mpfr_init(r11872034);
        mpfr_init_set_str(r11872035, "1", 10, MPFR_RNDN);
        mpfr_init(r11872036);
        mpfr_init_set_str(r11872037, "-5.697442517768994e-12", 10, MPFR_RNDN);
        mpfr_init(r11872038);
        mpfr_init(r11872039);
        mpfr_init(r11872040);
        mpfr_init(r11872041);
        mpfr_init(r11872042);
        mpfr_init(r11872043);
        mpfr_init(r11872044);
        mpfr_init(r11872045);
        mpfr_init(r11872046);
        mpfr_init(r11872047);
        mpfr_init_set_str(r11872048, "1/8", 10, MPFR_RNDN);
        mpfr_init(r11872049);
        mpfr_init(r11872050);
        mpfr_init(r11872051);
        mpfr_init_set_str(r11872052, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11872053);
        mpfr_init(r11872054);
        mpfr_init(r11872055);
        mpfr_init(r11872056);
        mpfr_init(r11872057);
}

double f_fm(double a, double x) {
        mpfr_set_d(r11872031, a, MPFR_RNDN);
        mpfr_set_d(r11872032, x, MPFR_RNDN);
        mpfr_mul(r11872033, r11872031, r11872032, MPFR_RNDN);
        mpfr_exp(r11872034, r11872033, MPFR_RNDN);
        ;
        mpfr_sub(r11872036, r11872034, r11872035, MPFR_RNDN);
        ;
        mpfr_set_si(r11872038, mpfr_cmp(r11872036, r11872037) <= 0, MPFR_RNDN);
        mpfr_mul(r11872039, r11872036, r11872034, MPFR_RNDN);
        mpfr_sqrt(r11872040, r11872034, MPFR_RNDN);
        mpfr_mul(r11872041, r11872039, r11872040, MPFR_RNDN);
        mpfr_add(r11872042, r11872036, r11872041, MPFR_RNDN);
        mpfr_add(r11872043, r11872040, r11872035, MPFR_RNDN);
        mpfr_add(r11872044, r11872035, r11872034, MPFR_RNDN);
        mpfr_sub(r11872045, r11872044, r11872040, MPFR_RNDN);
        mpfr_mul(r11872046, r11872043, r11872045, MPFR_RNDN);
        mpfr_div(r11872047, r11872042, r11872046, MPFR_RNDN);
        ;
        mpfr_mul(r11872049, r11872048, r11872032, MPFR_RNDN);
        mpfr_mul(r11872050, r11872033, r11872049, MPFR_RNDN);
        mpfr_mul(r11872051, r11872031, r11872050, MPFR_RNDN);
        ;
        mpfr_mul(r11872053, r11872052, r11872032, MPFR_RNDN);
        mpfr_mul(r11872054, r11872031, r11872053, MPFR_RNDN);
        mpfr_add(r11872055, r11872051, r11872054, MPFR_RNDN);
        mpfr_mul(r11872056, r11872055, r11872043, MPFR_RNDN);
        if (mpfr_get_si(r11872038, MPFR_RNDN)) { mpfr_set(r11872057, r11872047, MPFR_RNDN); } else { mpfr_set(r11872057, r11872056, MPFR_RNDN); };
        return mpfr_get_d(r11872057, MPFR_RNDN);
}

static mpfr_t r11872058, r11872059, r11872060, r11872061, r11872062, r11872063, r11872064, r11872065, r11872066, r11872067, r11872068, r11872069, r11872070, r11872071, r11872072, r11872073, r11872074, r11872075, r11872076, r11872077, r11872078, r11872079, r11872080, r11872081, r11872082, r11872083, r11872084;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r11872058);
        mpfr_init(r11872059);
        mpfr_init(r11872060);
        mpfr_init(r11872061);
        mpfr_init_set_str(r11872062, "1", 10, MPFR_RNDN);
        mpfr_init(r11872063);
        mpfr_init_set_str(r11872064, "-5.697442517768994e-12", 10, MPFR_RNDN);
        mpfr_init(r11872065);
        mpfr_init(r11872066);
        mpfr_init(r11872067);
        mpfr_init(r11872068);
        mpfr_init(r11872069);
        mpfr_init(r11872070);
        mpfr_init(r11872071);
        mpfr_init(r11872072);
        mpfr_init(r11872073);
        mpfr_init(r11872074);
        mpfr_init_set_str(r11872075, "1/8", 10, MPFR_RNDN);
        mpfr_init(r11872076);
        mpfr_init(r11872077);
        mpfr_init(r11872078);
        mpfr_init_set_str(r11872079, "1/2", 10, MPFR_RNDN);
        mpfr_init(r11872080);
        mpfr_init(r11872081);
        mpfr_init(r11872082);
        mpfr_init(r11872083);
        mpfr_init(r11872084);
}

double f_dm(double a, double x) {
        mpfr_set_d(r11872058, a, MPFR_RNDN);
        mpfr_set_d(r11872059, x, MPFR_RNDN);
        mpfr_mul(r11872060, r11872058, r11872059, MPFR_RNDN);
        mpfr_exp(r11872061, r11872060, MPFR_RNDN);
        ;
        mpfr_sub(r11872063, r11872061, r11872062, MPFR_RNDN);
        ;
        mpfr_set_si(r11872065, mpfr_cmp(r11872063, r11872064) <= 0, MPFR_RNDN);
        mpfr_mul(r11872066, r11872063, r11872061, MPFR_RNDN);
        mpfr_sqrt(r11872067, r11872061, MPFR_RNDN);
        mpfr_mul(r11872068, r11872066, r11872067, MPFR_RNDN);
        mpfr_add(r11872069, r11872063, r11872068, MPFR_RNDN);
        mpfr_add(r11872070, r11872067, r11872062, MPFR_RNDN);
        mpfr_add(r11872071, r11872062, r11872061, MPFR_RNDN);
        mpfr_sub(r11872072, r11872071, r11872067, MPFR_RNDN);
        mpfr_mul(r11872073, r11872070, r11872072, MPFR_RNDN);
        mpfr_div(r11872074, r11872069, r11872073, MPFR_RNDN);
        ;
        mpfr_mul(r11872076, r11872075, r11872059, MPFR_RNDN);
        mpfr_mul(r11872077, r11872060, r11872076, MPFR_RNDN);
        mpfr_mul(r11872078, r11872058, r11872077, MPFR_RNDN);
        ;
        mpfr_mul(r11872080, r11872079, r11872059, MPFR_RNDN);
        mpfr_mul(r11872081, r11872058, r11872080, MPFR_RNDN);
        mpfr_add(r11872082, r11872078, r11872081, MPFR_RNDN);
        mpfr_mul(r11872083, r11872082, r11872070, MPFR_RNDN);
        if (mpfr_get_si(r11872065, MPFR_RNDN)) { mpfr_set(r11872084, r11872074, MPFR_RNDN); } else { mpfr_set(r11872084, r11872083, MPFR_RNDN); };
        return mpfr_get_d(r11872084, MPFR_RNDN);
}

