#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 r26854 = a;
        float r26855 = x;
        float r26856 = r26854 * r26855;
        float r26857 = exp(r26856);
        float r26858 = 1;
        float r26859 = r26857 - r26858;
        return r26859;
}

double f_id(double a, double x) {
        double r26860 = a;
        double r26861 = x;
        double r26862 = r26860 * r26861;
        double r26863 = exp(r26862);
        double r26864 = 1;
        double r26865 = r26863 - r26864;
        return r26865;
}


double f_of(float a, float x) {
        float r26866 = a;
        float r26867 = x;
        float r26868 = r26866 * r26867;
        float r26869 = exp(r26868);
        float r26870 = 1;
        float r26871 = r26869 - r26870;
        float r26872 = -1.7231746715922135e-06;
        bool r26873 = r26871 <= r26872;
        float r26874 = cbrt(r26871);
        float r26875 = r26874 * r26874;
        float r26876 = sqrt(r26869);
        float r26877 = r26876 + r26870;
        float r26878 = r26876 - r26870;
        float r26879 = r26877 * r26878;
        float r26880 = cbrt(r26879);
        float r26881 = r26875 * r26880;
        float r26882 = r26868 * r26868;
        float r26883 = 1/6;
        float r26884 = r26868 * r26883;
        float r26885 = 1/2;
        float r26886 = r26884 + r26885;
        float r26887 = r26882 * r26886;
        float r26888 = r26887 + r26868;
        float r26889 = r26873 ? r26881 : r26888;
        return r26889;
}

double f_od(double a, double x) {
        double r26890 = a;
        double r26891 = x;
        double r26892 = r26890 * r26891;
        double r26893 = exp(r26892);
        double r26894 = 1;
        double r26895 = r26893 - r26894;
        double r26896 = -1.7231746715922135e-06;
        bool r26897 = r26895 <= r26896;
        double r26898 = cbrt(r26895);
        double r26899 = r26898 * r26898;
        double r26900 = sqrt(r26893);
        double r26901 = r26900 + r26894;
        double r26902 = r26900 - r26894;
        double r26903 = r26901 * r26902;
        double r26904 = cbrt(r26903);
        double r26905 = r26899 * r26904;
        double r26906 = r26892 * r26892;
        double r26907 = 1/6;
        double r26908 = r26892 * r26907;
        double r26909 = 1/2;
        double r26910 = r26908 + r26909;
        double r26911 = r26906 * r26910;
        double r26912 = r26911 + r26892;
        double r26913 = r26897 ? r26905 : r26912;
        return r26913;
}

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 r26914, r26915, r26916, r26917, r26918, r26919;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26914);
        mpfr_init(r26915);
        mpfr_init(r26916);
        mpfr_init(r26917);
        mpfr_init_set_str(r26918, "1", 10, MPFR_RNDN);
        mpfr_init(r26919);
}

double f_im(double a, double x) {
        mpfr_set_d(r26914, a, MPFR_RNDN);
        mpfr_set_d(r26915, x, MPFR_RNDN);
        mpfr_mul(r26916, r26914, r26915, MPFR_RNDN);
        mpfr_exp(r26917, r26916, MPFR_RNDN);
        ;
        mpfr_sub(r26919, r26917, r26918, MPFR_RNDN);
        return mpfr_get_d(r26919, MPFR_RNDN);
}

static mpfr_t r26920, r26921, r26922, r26923, r26924, r26925, r26926, r26927, r26928, r26929, r26930, r26931, r26932, r26933, r26934, r26935, r26936, r26937, r26938, r26939, r26940, r26941, r26942, r26943;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26920);
        mpfr_init(r26921);
        mpfr_init(r26922);
        mpfr_init(r26923);
        mpfr_init_set_str(r26924, "1", 10, MPFR_RNDN);
        mpfr_init(r26925);
        mpfr_init_set_str(r26926, "-1.7231746715922135e-06", 10, MPFR_RNDN);
        mpfr_init(r26927);
        mpfr_init(r26928);
        mpfr_init(r26929);
        mpfr_init(r26930);
        mpfr_init(r26931);
        mpfr_init(r26932);
        mpfr_init(r26933);
        mpfr_init(r26934);
        mpfr_init(r26935);
        mpfr_init(r26936);
        mpfr_init_set_str(r26937, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26938);
        mpfr_init_set_str(r26939, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26940);
        mpfr_init(r26941);
        mpfr_init(r26942);
        mpfr_init(r26943);
}

double f_fm(double a, double x) {
        mpfr_set_d(r26920, a, MPFR_RNDN);
        mpfr_set_d(r26921, x, MPFR_RNDN);
        mpfr_mul(r26922, r26920, r26921, MPFR_RNDN);
        mpfr_exp(r26923, r26922, MPFR_RNDN);
        ;
        mpfr_sub(r26925, r26923, r26924, MPFR_RNDN);
        ;
        mpfr_set_si(r26927, mpfr_cmp(r26925, r26926) <= 0, MPFR_RNDN);
        mpfr_cbrt(r26928, r26925, MPFR_RNDN);
        mpfr_mul(r26929, r26928, r26928, MPFR_RNDN);
        mpfr_sqrt(r26930, r26923, MPFR_RNDN);
        mpfr_add(r26931, r26930, r26924, MPFR_RNDN);
        mpfr_sub(r26932, r26930, r26924, MPFR_RNDN);
        mpfr_mul(r26933, r26931, r26932, MPFR_RNDN);
        mpfr_cbrt(r26934, r26933, MPFR_RNDN);
        mpfr_mul(r26935, r26929, r26934, MPFR_RNDN);
        mpfr_mul(r26936, r26922, r26922, MPFR_RNDN);
        ;
        mpfr_mul(r26938, r26922, r26937, MPFR_RNDN);
        ;
        mpfr_add(r26940, r26938, r26939, MPFR_RNDN);
        mpfr_mul(r26941, r26936, r26940, MPFR_RNDN);
        mpfr_add(r26942, r26941, r26922, MPFR_RNDN);
        if (mpfr_get_si(r26927, MPFR_RNDN)) { mpfr_set(r26943, r26935, MPFR_RNDN); } else { mpfr_set(r26943, r26942, MPFR_RNDN); };
        return mpfr_get_d(r26943, MPFR_RNDN);
}

static mpfr_t r26944, r26945, r26946, r26947, r26948, r26949, r26950, r26951, r26952, r26953, r26954, r26955, r26956, r26957, r26958, r26959, r26960, r26961, r26962, r26963, r26964, r26965, r26966, r26967;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26944);
        mpfr_init(r26945);
        mpfr_init(r26946);
        mpfr_init(r26947);
        mpfr_init_set_str(r26948, "1", 10, MPFR_RNDN);
        mpfr_init(r26949);
        mpfr_init_set_str(r26950, "-1.7231746715922135e-06", 10, MPFR_RNDN);
        mpfr_init(r26951);
        mpfr_init(r26952);
        mpfr_init(r26953);
        mpfr_init(r26954);
        mpfr_init(r26955);
        mpfr_init(r26956);
        mpfr_init(r26957);
        mpfr_init(r26958);
        mpfr_init(r26959);
        mpfr_init(r26960);
        mpfr_init_set_str(r26961, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26962);
        mpfr_init_set_str(r26963, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26964);
        mpfr_init(r26965);
        mpfr_init(r26966);
        mpfr_init(r26967);
}

double f_dm(double a, double x) {
        mpfr_set_d(r26944, a, MPFR_RNDN);
        mpfr_set_d(r26945, x, MPFR_RNDN);
        mpfr_mul(r26946, r26944, r26945, MPFR_RNDN);
        mpfr_exp(r26947, r26946, MPFR_RNDN);
        ;
        mpfr_sub(r26949, r26947, r26948, MPFR_RNDN);
        ;
        mpfr_set_si(r26951, mpfr_cmp(r26949, r26950) <= 0, MPFR_RNDN);
        mpfr_cbrt(r26952, r26949, MPFR_RNDN);
        mpfr_mul(r26953, r26952, r26952, MPFR_RNDN);
        mpfr_sqrt(r26954, r26947, MPFR_RNDN);
        mpfr_add(r26955, r26954, r26948, MPFR_RNDN);
        mpfr_sub(r26956, r26954, r26948, MPFR_RNDN);
        mpfr_mul(r26957, r26955, r26956, MPFR_RNDN);
        mpfr_cbrt(r26958, r26957, MPFR_RNDN);
        mpfr_mul(r26959, r26953, r26958, MPFR_RNDN);
        mpfr_mul(r26960, r26946, r26946, MPFR_RNDN);
        ;
        mpfr_mul(r26962, r26946, r26961, MPFR_RNDN);
        ;
        mpfr_add(r26964, r26962, r26963, MPFR_RNDN);
        mpfr_mul(r26965, r26960, r26964, MPFR_RNDN);
        mpfr_add(r26966, r26965, r26946, MPFR_RNDN);
        if (mpfr_get_si(r26951, MPFR_RNDN)) { mpfr_set(r26967, r26959, MPFR_RNDN); } else { mpfr_set(r26967, r26966, MPFR_RNDN); };
        return mpfr_get_d(r26967, MPFR_RNDN);
}

