#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 r4875976 = a;
        float r4875977 = x;
        float r4875978 = r4875976 * r4875977;
        float r4875979 = exp(r4875978);
        float r4875980 = 1.0f;
        float r4875981 = r4875979 - r4875980;
        return r4875981;
}

double f_id(double a, double x) {
        double r4875982 = a;
        double r4875983 = x;
        double r4875984 = r4875982 * r4875983;
        double r4875985 = exp(r4875984);
        double r4875986 = 1.0;
        double r4875987 = r4875985 - r4875986;
        return r4875987;
}


double f_of(float a, float x) {
        float r4875988 = a;
        float r4875989 = x;
        float r4875990 = r4875988 * r4875989;
        float r4875991 = -1.425908280516283e-19f;
        bool r4875992 = r4875990 <= r4875991;
        float r4875993 = exp(r4875990);
        float r4875994 = 1.0f;
        float r4875995 = r4875993 - r4875994;
        float r4875996 = cbrt(r4875995);
        float r4875997 = r4875996 * r4875996;
        float r4875998 = sqrt(r4875993);
        float r4875999 = r4875998 + r4875994;
        float r4876000 = r4875998 - r4875994;
        float r4876001 = exp(r4876000);
        float r4876002 = log(r4876001);
        float r4876003 = r4875999 * r4876002;
        float r4876004 = cbrt(r4876003);
        float r4876005 = r4875997 * r4876004;
        float r4876006 = 0.16666666666666666f;
        float r4876007 = 3.0f;
        float r4876008 = pow(r4875988, r4876007);
        float r4876009 = pow(r4875989, r4876007);
        float r4876010 = r4876008 * r4876009;
        float r4876011 = r4876006 * r4876010;
        float r4876012 = 0.5f;
        float r4876013 = 2.0f;
        float r4876014 = pow(r4875988, r4876013);
        float r4876015 = pow(r4875989, r4876013);
        float r4876016 = r4876014 * r4876015;
        float r4876017 = r4876012 * r4876016;
        float r4876018 = r4876017 + r4875990;
        float r4876019 = r4876011 + r4876018;
        float r4876020 = r4875992 ? r4876005 : r4876019;
        return r4876020;
}

double f_od(double a, double x) {
        double r4876021 = a;
        double r4876022 = x;
        double r4876023 = r4876021 * r4876022;
        double r4876024 = -1.425908280516283e-19;
        bool r4876025 = r4876023 <= r4876024;
        double r4876026 = exp(r4876023);
        double r4876027 = 1.0;
        double r4876028 = r4876026 - r4876027;
        double r4876029 = cbrt(r4876028);
        double r4876030 = r4876029 * r4876029;
        double r4876031 = sqrt(r4876026);
        double r4876032 = r4876031 + r4876027;
        double r4876033 = r4876031 - r4876027;
        double r4876034 = exp(r4876033);
        double r4876035 = log(r4876034);
        double r4876036 = r4876032 * r4876035;
        double r4876037 = cbrt(r4876036);
        double r4876038 = r4876030 * r4876037;
        double r4876039 = 0.16666666666666666;
        double r4876040 = 3.0;
        double r4876041 = pow(r4876021, r4876040);
        double r4876042 = pow(r4876022, r4876040);
        double r4876043 = r4876041 * r4876042;
        double r4876044 = r4876039 * r4876043;
        double r4876045 = 0.5;
        double r4876046 = 2.0;
        double r4876047 = pow(r4876021, r4876046);
        double r4876048 = pow(r4876022, r4876046);
        double r4876049 = r4876047 * r4876048;
        double r4876050 = r4876045 * r4876049;
        double r4876051 = r4876050 + r4876023;
        double r4876052 = r4876044 + r4876051;
        double r4876053 = r4876025 ? r4876038 : r4876052;
        return r4876053;
}

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 r4876054, r4876055, r4876056, r4876057, r4876058, r4876059;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4876054);
        mpfr_init(r4876055);
        mpfr_init(r4876056);
        mpfr_init(r4876057);
        mpfr_init_set_str(r4876058, "1", 10, MPFR_RNDN);
        mpfr_init(r4876059);
}

double f_im(double a, double x) {
        mpfr_set_d(r4876054, a, MPFR_RNDN);
        mpfr_set_d(r4876055, x, MPFR_RNDN);
        mpfr_mul(r4876056, r4876054, r4876055, MPFR_RNDN);
        mpfr_exp(r4876057, r4876056, MPFR_RNDN);
        ;
        mpfr_sub(r4876059, r4876057, r4876058, MPFR_RNDN);
        return mpfr_get_d(r4876059, MPFR_RNDN);
}

static mpfr_t r4876060, r4876061, r4876062, r4876063, r4876064, r4876065, r4876066, r4876067, r4876068, r4876069, r4876070, r4876071, r4876072, r4876073, r4876074, r4876075, r4876076, r4876077, r4876078, r4876079, r4876080, r4876081, r4876082, r4876083, r4876084, r4876085, r4876086, r4876087, r4876088, r4876089, r4876090, r4876091, r4876092;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4876060);
        mpfr_init(r4876061);
        mpfr_init(r4876062);
        mpfr_init_set_str(r4876063, "-1.425908280516283e-19", 10, MPFR_RNDN);
        mpfr_init(r4876064);
        mpfr_init(r4876065);
        mpfr_init_set_str(r4876066, "1", 10, MPFR_RNDN);
        mpfr_init(r4876067);
        mpfr_init(r4876068);
        mpfr_init(r4876069);
        mpfr_init(r4876070);
        mpfr_init(r4876071);
        mpfr_init(r4876072);
        mpfr_init(r4876073);
        mpfr_init(r4876074);
        mpfr_init(r4876075);
        mpfr_init(r4876076);
        mpfr_init(r4876077);
        mpfr_init_set_str(r4876078, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r4876079, "3", 10, MPFR_RNDN);
        mpfr_init(r4876080);
        mpfr_init(r4876081);
        mpfr_init(r4876082);
        mpfr_init(r4876083);
        mpfr_init_set_str(r4876084, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4876085, "2", 10, MPFR_RNDN);
        mpfr_init(r4876086);
        mpfr_init(r4876087);
        mpfr_init(r4876088);
        mpfr_init(r4876089);
        mpfr_init(r4876090);
        mpfr_init(r4876091);
        mpfr_init(r4876092);
}

double f_fm(double a, double x) {
        mpfr_set_d(r4876060, a, MPFR_RNDN);
        mpfr_set_d(r4876061, x, MPFR_RNDN);
        mpfr_mul(r4876062, r4876060, r4876061, MPFR_RNDN);
        ;
        mpfr_set_si(r4876064, mpfr_cmp(r4876062, r4876063) <= 0, MPFR_RNDN);
        mpfr_exp(r4876065, r4876062, MPFR_RNDN);
        ;
        mpfr_sub(r4876067, r4876065, r4876066, MPFR_RNDN);
        mpfr_cbrt(r4876068, r4876067, MPFR_RNDN);
        mpfr_mul(r4876069, r4876068, r4876068, MPFR_RNDN);
        mpfr_sqrt(r4876070, r4876065, MPFR_RNDN);
        mpfr_add(r4876071, r4876070, r4876066, MPFR_RNDN);
        mpfr_sub(r4876072, r4876070, r4876066, MPFR_RNDN);
        mpfr_exp(r4876073, r4876072, MPFR_RNDN);
        mpfr_log(r4876074, r4876073, MPFR_RNDN);
        mpfr_mul(r4876075, r4876071, r4876074, MPFR_RNDN);
        mpfr_cbrt(r4876076, r4876075, MPFR_RNDN);
        mpfr_mul(r4876077, r4876069, r4876076, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4876080, r4876060, r4876079, MPFR_RNDN);
        mpfr_pow(r4876081, r4876061, r4876079, MPFR_RNDN);
        mpfr_mul(r4876082, r4876080, r4876081, MPFR_RNDN);
        mpfr_mul(r4876083, r4876078, r4876082, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4876086, r4876060, r4876085, MPFR_RNDN);
        mpfr_pow(r4876087, r4876061, r4876085, MPFR_RNDN);
        mpfr_mul(r4876088, r4876086, r4876087, MPFR_RNDN);
        mpfr_mul(r4876089, r4876084, r4876088, MPFR_RNDN);
        mpfr_add(r4876090, r4876089, r4876062, MPFR_RNDN);
        mpfr_add(r4876091, r4876083, r4876090, MPFR_RNDN);
        if (mpfr_get_si(r4876064, MPFR_RNDN)) { mpfr_set(r4876092, r4876077, MPFR_RNDN); } else { mpfr_set(r4876092, r4876091, MPFR_RNDN); };
        return mpfr_get_d(r4876092, MPFR_RNDN);
}

static mpfr_t r4876093, r4876094, r4876095, r4876096, r4876097, r4876098, r4876099, r4876100, r4876101, r4876102, r4876103, r4876104, r4876105, r4876106, r4876107, r4876108, r4876109, r4876110, r4876111, r4876112, r4876113, r4876114, r4876115, r4876116, r4876117, r4876118, r4876119, r4876120, r4876121, r4876122, r4876123, r4876124, r4876125;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1424);
        mpfr_init(r4876093);
        mpfr_init(r4876094);
        mpfr_init(r4876095);
        mpfr_init_set_str(r4876096, "-1.425908280516283e-19", 10, MPFR_RNDN);
        mpfr_init(r4876097);
        mpfr_init(r4876098);
        mpfr_init_set_str(r4876099, "1", 10, MPFR_RNDN);
        mpfr_init(r4876100);
        mpfr_init(r4876101);
        mpfr_init(r4876102);
        mpfr_init(r4876103);
        mpfr_init(r4876104);
        mpfr_init(r4876105);
        mpfr_init(r4876106);
        mpfr_init(r4876107);
        mpfr_init(r4876108);
        mpfr_init(r4876109);
        mpfr_init(r4876110);
        mpfr_init_set_str(r4876111, "1/6", 10, MPFR_RNDN);
        mpfr_init_set_str(r4876112, "3", 10, MPFR_RNDN);
        mpfr_init(r4876113);
        mpfr_init(r4876114);
        mpfr_init(r4876115);
        mpfr_init(r4876116);
        mpfr_init_set_str(r4876117, "1/2", 10, MPFR_RNDN);
        mpfr_init_set_str(r4876118, "2", 10, MPFR_RNDN);
        mpfr_init(r4876119);
        mpfr_init(r4876120);
        mpfr_init(r4876121);
        mpfr_init(r4876122);
        mpfr_init(r4876123);
        mpfr_init(r4876124);
        mpfr_init(r4876125);
}

double f_dm(double a, double x) {
        mpfr_set_d(r4876093, a, MPFR_RNDN);
        mpfr_set_d(r4876094, x, MPFR_RNDN);
        mpfr_mul(r4876095, r4876093, r4876094, MPFR_RNDN);
        ;
        mpfr_set_si(r4876097, mpfr_cmp(r4876095, r4876096) <= 0, MPFR_RNDN);
        mpfr_exp(r4876098, r4876095, MPFR_RNDN);
        ;
        mpfr_sub(r4876100, r4876098, r4876099, MPFR_RNDN);
        mpfr_cbrt(r4876101, r4876100, MPFR_RNDN);
        mpfr_mul(r4876102, r4876101, r4876101, MPFR_RNDN);
        mpfr_sqrt(r4876103, r4876098, MPFR_RNDN);
        mpfr_add(r4876104, r4876103, r4876099, MPFR_RNDN);
        mpfr_sub(r4876105, r4876103, r4876099, MPFR_RNDN);
        mpfr_exp(r4876106, r4876105, MPFR_RNDN);
        mpfr_log(r4876107, r4876106, MPFR_RNDN);
        mpfr_mul(r4876108, r4876104, r4876107, MPFR_RNDN);
        mpfr_cbrt(r4876109, r4876108, MPFR_RNDN);
        mpfr_mul(r4876110, r4876102, r4876109, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4876113, r4876093, r4876112, MPFR_RNDN);
        mpfr_pow(r4876114, r4876094, r4876112, MPFR_RNDN);
        mpfr_mul(r4876115, r4876113, r4876114, MPFR_RNDN);
        mpfr_mul(r4876116, r4876111, r4876115, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r4876119, r4876093, r4876118, MPFR_RNDN);
        mpfr_pow(r4876120, r4876094, r4876118, MPFR_RNDN);
        mpfr_mul(r4876121, r4876119, r4876120, MPFR_RNDN);
        mpfr_mul(r4876122, r4876117, r4876121, MPFR_RNDN);
        mpfr_add(r4876123, r4876122, r4876095, MPFR_RNDN);
        mpfr_add(r4876124, r4876116, r4876123, MPFR_RNDN);
        if (mpfr_get_si(r4876097, MPFR_RNDN)) { mpfr_set(r4876125, r4876110, MPFR_RNDN); } else { mpfr_set(r4876125, r4876124, MPFR_RNDN); };
        return mpfr_get_d(r4876125, MPFR_RNDN);
}

