#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 r26960 = a;
        float r26961 = x;
        float r26962 = r26960 * r26961;
        float r26963 = exp(r26962);
        float r26964 = 1;
        float r26965 = r26963 - r26964;
        return r26965;
}

double f_id(double a, double x) {
        double r26966 = a;
        double r26967 = x;
        double r26968 = r26966 * r26967;
        double r26969 = exp(r26968);
        double r26970 = 1;
        double r26971 = r26969 - r26970;
        return r26971;
}


double f_of(float a, float x) {
        float r26972 = x;
        float r26973 = a;
        float r26974 = r26972 * r26973;
        float r26975 = exp(r26974);
        float r26976 = 1;
        float r26977 = r26975 - r26976;
        float r26978 = log(r26977);
        float r26979 = exp(r26978);
        float r26980 = 3;
        float r26981 = pow(r26979, r26980);
        float r26982 = cbrt(r26981);
        float r26983 = 0.006577663290784691;
        bool r26984 = r26982 <= r26983;
        float r26985 = r26973 * r26972;
        float r26986 = r26985 * r26985;
        float r26987 = 1/6;
        float r26988 = r26985 * r26987;
        float r26989 = 1/2;
        float r26990 = r26988 + r26989;
        float r26991 = r26986 * r26990;
        float r26992 = r26991 + r26985;
        float r26993 = r26977 * r26977;
        float r26994 = cbrt(r26993);
        float r26995 = cbrt(r26977);
        float r26996 = r26994 * r26995;
        float r26997 = r26984 ? r26992 : r26996;
        return r26997;
}

double f_od(double a, double x) {
        double r26998 = x;
        double r26999 = a;
        double r27000 = r26998 * r26999;
        double r27001 = exp(r27000);
        double r27002 = 1;
        double r27003 = r27001 - r27002;
        double r27004 = log(r27003);
        double r27005 = exp(r27004);
        double r27006 = 3;
        double r27007 = pow(r27005, r27006);
        double r27008 = cbrt(r27007);
        double r27009 = 0.006577663290784691;
        bool r27010 = r27008 <= r27009;
        double r27011 = r26999 * r26998;
        double r27012 = r27011 * r27011;
        double r27013 = 1/6;
        double r27014 = r27011 * r27013;
        double r27015 = 1/2;
        double r27016 = r27014 + r27015;
        double r27017 = r27012 * r27016;
        double r27018 = r27017 + r27011;
        double r27019 = r27003 * r27003;
        double r27020 = cbrt(r27019);
        double r27021 = cbrt(r27003);
        double r27022 = r27020 * r27021;
        double r27023 = r27010 ? r27018 : r27022;
        return r27023;
}

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 r27024, r27025, r27026, r27027, r27028, r27029;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27024);
        mpfr_init(r27025);
        mpfr_init(r27026);
        mpfr_init(r27027);
        mpfr_init_set_str(r27028, "1", 10, MPFR_RNDN);
        mpfr_init(r27029);
}

double f_im(double a, double x) {
        mpfr_set_d(r27024, a, MPFR_RNDN);
        mpfr_set_d(r27025, x, MPFR_RNDN);
        mpfr_mul(r27026, r27024, r27025, MPFR_RNDN);
        mpfr_exp(r27027, r27026, MPFR_RNDN);
        ;
        mpfr_sub(r27029, r27027, r27028, MPFR_RNDN);
        return mpfr_get_d(r27029, MPFR_RNDN);
}

static mpfr_t r27030, r27031, r27032, r27033, r27034, r27035, r27036, r27037, r27038, r27039, r27040, r27041, r27042, r27043, r27044, r27045, r27046, r27047, r27048, r27049, r27050, r27051, r27052, r27053, r27054, r27055;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27030);
        mpfr_init(r27031);
        mpfr_init(r27032);
        mpfr_init(r27033);
        mpfr_init_set_str(r27034, "1", 10, MPFR_RNDN);
        mpfr_init(r27035);
        mpfr_init(r27036);
        mpfr_init(r27037);
        mpfr_init_set_str(r27038, "3", 10, MPFR_RNDN);
        mpfr_init(r27039);
        mpfr_init(r27040);
        mpfr_init_set_str(r27041, "0.006577663290784691", 10, MPFR_RNDN);
        mpfr_init(r27042);
        mpfr_init(r27043);
        mpfr_init(r27044);
        mpfr_init_set_str(r27045, "1/6", 10, MPFR_RNDN);
        mpfr_init(r27046);
        mpfr_init_set_str(r27047, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27048);
        mpfr_init(r27049);
        mpfr_init(r27050);
        mpfr_init(r27051);
        mpfr_init(r27052);
        mpfr_init(r27053);
        mpfr_init(r27054);
        mpfr_init(r27055);
}

double f_fm(double a, double x) {
        mpfr_set_d(r27030, x, MPFR_RNDN);
        mpfr_set_d(r27031, a, MPFR_RNDN);
        mpfr_mul(r27032, r27030, r27031, MPFR_RNDN);
        mpfr_exp(r27033, r27032, MPFR_RNDN);
        ;
        mpfr_sub(r27035, r27033, r27034, MPFR_RNDN);
        mpfr_log(r27036, r27035, MPFR_RNDN);
        mpfr_exp(r27037, r27036, MPFR_RNDN);
        ;
        mpfr_pow(r27039, r27037, r27038, MPFR_RNDN);
        mpfr_cbrt(r27040, r27039, MPFR_RNDN);
        ;
        mpfr_set_si(r27042, mpfr_cmp(r27040, r27041) <= 0, MPFR_RNDN);
        mpfr_mul(r27043, r27031, r27030, MPFR_RNDN);
        mpfr_mul(r27044, r27043, r27043, MPFR_RNDN);
        ;
        mpfr_mul(r27046, r27043, r27045, MPFR_RNDN);
        ;
        mpfr_add(r27048, r27046, r27047, MPFR_RNDN);
        mpfr_mul(r27049, r27044, r27048, MPFR_RNDN);
        mpfr_add(r27050, r27049, r27043, MPFR_RNDN);
        mpfr_mul(r27051, r27035, r27035, MPFR_RNDN);
        mpfr_cbrt(r27052, r27051, MPFR_RNDN);
        mpfr_cbrt(r27053, r27035, MPFR_RNDN);
        mpfr_mul(r27054, r27052, r27053, MPFR_RNDN);
        if (mpfr_get_si(r27042, MPFR_RNDN)) { mpfr_set(r27055, r27050, MPFR_RNDN); } else { mpfr_set(r27055, r27054, MPFR_RNDN); };
        return mpfr_get_d(r27055, MPFR_RNDN);
}

static mpfr_t r27056, r27057, r27058, r27059, r27060, r27061, r27062, r27063, r27064, r27065, r27066, r27067, r27068, r27069, r27070, r27071, r27072, r27073, r27074, r27075, r27076, r27077, r27078, r27079, r27080, r27081;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27056);
        mpfr_init(r27057);
        mpfr_init(r27058);
        mpfr_init(r27059);
        mpfr_init_set_str(r27060, "1", 10, MPFR_RNDN);
        mpfr_init(r27061);
        mpfr_init(r27062);
        mpfr_init(r27063);
        mpfr_init_set_str(r27064, "3", 10, MPFR_RNDN);
        mpfr_init(r27065);
        mpfr_init(r27066);
        mpfr_init_set_str(r27067, "0.006577663290784691", 10, MPFR_RNDN);
        mpfr_init(r27068);
        mpfr_init(r27069);
        mpfr_init(r27070);
        mpfr_init_set_str(r27071, "1/6", 10, MPFR_RNDN);
        mpfr_init(r27072);
        mpfr_init_set_str(r27073, "1/2", 10, MPFR_RNDN);
        mpfr_init(r27074);
        mpfr_init(r27075);
        mpfr_init(r27076);
        mpfr_init(r27077);
        mpfr_init(r27078);
        mpfr_init(r27079);
        mpfr_init(r27080);
        mpfr_init(r27081);
}

double f_dm(double a, double x) {
        mpfr_set_d(r27056, x, MPFR_RNDN);
        mpfr_set_d(r27057, a, MPFR_RNDN);
        mpfr_mul(r27058, r27056, r27057, MPFR_RNDN);
        mpfr_exp(r27059, r27058, MPFR_RNDN);
        ;
        mpfr_sub(r27061, r27059, r27060, MPFR_RNDN);
        mpfr_log(r27062, r27061, MPFR_RNDN);
        mpfr_exp(r27063, r27062, MPFR_RNDN);
        ;
        mpfr_pow(r27065, r27063, r27064, MPFR_RNDN);
        mpfr_cbrt(r27066, r27065, MPFR_RNDN);
        ;
        mpfr_set_si(r27068, mpfr_cmp(r27066, r27067) <= 0, MPFR_RNDN);
        mpfr_mul(r27069, r27057, r27056, MPFR_RNDN);
        mpfr_mul(r27070, r27069, r27069, MPFR_RNDN);
        ;
        mpfr_mul(r27072, r27069, r27071, MPFR_RNDN);
        ;
        mpfr_add(r27074, r27072, r27073, MPFR_RNDN);
        mpfr_mul(r27075, r27070, r27074, MPFR_RNDN);
        mpfr_add(r27076, r27075, r27069, MPFR_RNDN);
        mpfr_mul(r27077, r27061, r27061, MPFR_RNDN);
        mpfr_cbrt(r27078, r27077, MPFR_RNDN);
        mpfr_cbrt(r27079, r27061, MPFR_RNDN);
        mpfr_mul(r27080, r27078, r27079, MPFR_RNDN);
        if (mpfr_get_si(r27068, MPFR_RNDN)) { mpfr_set(r27081, r27076, MPFR_RNDN); } else { mpfr_set(r27081, r27080, MPFR_RNDN); };
        return mpfr_get_d(r27081, MPFR_RNDN);
}

