#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 r26870 = a;
        float r26871 = x;
        float r26872 = r26870 * r26871;
        float r26873 = exp(r26872);
        float r26874 = 1;
        float r26875 = r26873 - r26874;
        return r26875;
}

double f_id(double a, double x) {
        double r26876 = a;
        double r26877 = x;
        double r26878 = r26876 * r26877;
        double r26879 = exp(r26878);
        double r26880 = 1;
        double r26881 = r26879 - r26880;
        return r26881;
}


double f_of(float a, float x) {
        float r26882 = a;
        float r26883 = x;
        float r26884 = r26882 * r26883;
        float r26885 = exp(r26884);
        float r26886 = 1;
        float r26887 = r26885 - r26886;
        float r26888 = -2.8477152048320993e-13;
        bool r26889 = r26887 <= r26888;
        float r26890 = sqrt(r26885);
        float r26891 = r26890 + r26886;
        float r26892 = r26890 - r26886;
        float r26893 = r26891 * r26892;
        float r26894 = r26884 * r26884;
        float r26895 = 1/6;
        float r26896 = r26884 * r26895;
        float r26897 = 1/2;
        float r26898 = r26896 + r26897;
        float r26899 = r26894 * r26898;
        float r26900 = r26899 + r26884;
        float r26901 = r26889 ? r26893 : r26900;
        return r26901;
}

double f_od(double a, double x) {
        double r26902 = a;
        double r26903 = x;
        double r26904 = r26902 * r26903;
        double r26905 = exp(r26904);
        double r26906 = 1;
        double r26907 = r26905 - r26906;
        double r26908 = -2.8477152048320993e-13;
        bool r26909 = r26907 <= r26908;
        double r26910 = sqrt(r26905);
        double r26911 = r26910 + r26906;
        double r26912 = r26910 - r26906;
        double r26913 = r26911 * r26912;
        double r26914 = r26904 * r26904;
        double r26915 = 1/6;
        double r26916 = r26904 * r26915;
        double r26917 = 1/2;
        double r26918 = r26916 + r26917;
        double r26919 = r26914 * r26918;
        double r26920 = r26919 + r26904;
        double r26921 = r26909 ? r26913 : r26920;
        return r26921;
}

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 r26922, r26923, r26924, r26925, r26926, r26927;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26922);
        mpfr_init(r26923);
        mpfr_init(r26924);
        mpfr_init(r26925);
        mpfr_init_set_str(r26926, "1", 10, MPFR_RNDN);
        mpfr_init(r26927);
}

double f_im(double a, double x) {
        mpfr_set_d(r26922, a, MPFR_RNDN);
        mpfr_set_d(r26923, x, MPFR_RNDN);
        mpfr_mul(r26924, r26922, r26923, MPFR_RNDN);
        mpfr_exp(r26925, r26924, MPFR_RNDN);
        ;
        mpfr_sub(r26927, r26925, r26926, MPFR_RNDN);
        return mpfr_get_d(r26927, MPFR_RNDN);
}

static mpfr_t r26928, r26929, r26930, r26931, r26932, r26933, r26934, r26935, r26936, r26937, r26938, r26939, r26940, r26941, r26942, r26943, r26944, r26945, r26946, r26947;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r26928);
        mpfr_init(r26929);
        mpfr_init(r26930);
        mpfr_init(r26931);
        mpfr_init_set_str(r26932, "1", 10, MPFR_RNDN);
        mpfr_init(r26933);
        mpfr_init_set_str(r26934, "-2.8477152048320993e-13", 10, MPFR_RNDN);
        mpfr_init(r26935);
        mpfr_init(r26936);
        mpfr_init(r26937);
        mpfr_init(r26938);
        mpfr_init(r26939);
        mpfr_init(r26940);
        mpfr_init_set_str(r26941, "1/6", 10, MPFR_RNDN);
        mpfr_init(r26942);
        mpfr_init_set_str(r26943, "1/2", 10, MPFR_RNDN);
        mpfr_init(r26944);
        mpfr_init(r26945);
        mpfr_init(r26946);
        mpfr_init(r26947);
}

double f_fm(double a, double x) {
        mpfr_set_d(r26928, a, MPFR_RNDN);
        mpfr_set_d(r26929, x, MPFR_RNDN);
        mpfr_mul(r26930, r26928, r26929, MPFR_RNDN);
        mpfr_exp(r26931, r26930, MPFR_RNDN);
        ;
        mpfr_sub(r26933, r26931, r26932, MPFR_RNDN);
        ;
        mpfr_set_si(r26935, mpfr_cmp(r26933, r26934) <= 0, MPFR_RNDN);
        mpfr_sqrt(r26936, r26931, MPFR_RNDN);
        mpfr_add(r26937, r26936, r26932, MPFR_RNDN);
        mpfr_sub(r26938, r26936, r26932, MPFR_RNDN);
        mpfr_mul(r26939, r26937, r26938, MPFR_RNDN);
        mpfr_mul(r26940, r26930, r26930, MPFR_RNDN);
        ;
        mpfr_mul(r26942, r26930, r26941, MPFR_RNDN);
        ;
        mpfr_add(r26944, r26942, r26943, MPFR_RNDN);
        mpfr_mul(r26945, r26940, r26944, MPFR_RNDN);
        mpfr_add(r26946, r26945, r26930, MPFR_RNDN);
        if (mpfr_get_si(r26935, MPFR_RNDN)) { mpfr_set(r26947, r26939, MPFR_RNDN); } else { mpfr_set(r26947, r26946, MPFR_RNDN); };
        return mpfr_get_d(r26947, MPFR_RNDN);
}

static mpfr_t 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(r26948);
        mpfr_init(r26949);
        mpfr_init(r26950);
        mpfr_init(r26951);
        mpfr_init_set_str(r26952, "1", 10, MPFR_RNDN);
        mpfr_init(r26953);
        mpfr_init_set_str(r26954, "-2.8477152048320993e-13", 10, MPFR_RNDN);
        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(r26948, a, MPFR_RNDN);
        mpfr_set_d(r26949, x, MPFR_RNDN);
        mpfr_mul(r26950, r26948, r26949, MPFR_RNDN);
        mpfr_exp(r26951, r26950, MPFR_RNDN);
        ;
        mpfr_sub(r26953, r26951, r26952, MPFR_RNDN);
        ;
        mpfr_set_si(r26955, mpfr_cmp(r26953, r26954) <= 0, MPFR_RNDN);
        mpfr_sqrt(r26956, r26951, MPFR_RNDN);
        mpfr_add(r26957, r26956, r26952, MPFR_RNDN);
        mpfr_sub(r26958, r26956, r26952, MPFR_RNDN);
        mpfr_mul(r26959, r26957, r26958, MPFR_RNDN);
        mpfr_mul(r26960, r26950, r26950, MPFR_RNDN);
        ;
        mpfr_mul(r26962, r26950, r26961, MPFR_RNDN);
        ;
        mpfr_add(r26964, r26962, r26963, MPFR_RNDN);
        mpfr_mul(r26965, r26960, r26964, MPFR_RNDN);
        mpfr_add(r26966, r26965, r26950, MPFR_RNDN);
        if (mpfr_get_si(r26955, MPFR_RNDN)) { mpfr_set(r26967, r26959, MPFR_RNDN); } else { mpfr_set(r26967, r26966, MPFR_RNDN); };
        return mpfr_get_d(r26967, MPFR_RNDN);
}

