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

char *name = "exp2 (problem 3.3.7)";

double f_if(float x) {
        float r24891 = x;
        float r24892 = exp(r24891);
        float r24893 = 2;
        float r24894 = r24892 - r24893;
        float r24895 = -r24891;
        float r24896 = exp(r24895);
        float r24897 = r24894 + r24896;
        return r24897;
}

double f_id(double x) {
        double r24898 = x;
        double r24899 = exp(r24898);
        double r24900 = 2;
        double r24901 = r24899 - r24900;
        double r24902 = -r24898;
        double r24903 = exp(r24902);
        double r24904 = r24901 + r24903;
        return r24904;
}


double f_of(float x) {
        float r24905 = x;
        float r24906 = 2;
        float r24907 = pow(r24905, r24906);
        float r24908 = 1/12;
        float r24909 = 4;
        float r24910 = pow(r24905, r24909);
        float r24911 = r24908 * r24910;
        float r24912 = 1/360;
        float r24913 = 6;
        float r24914 = pow(r24905, r24913);
        float r24915 = r24912 * r24914;
        float r24916 = r24911 + r24915;
        float r24917 = r24907 + r24916;
        return r24917;
}

double f_od(double x) {
        double r24918 = x;
        double r24919 = 2;
        double r24920 = pow(r24918, r24919);
        double r24921 = 1/12;
        double r24922 = 4;
        double r24923 = pow(r24918, r24922);
        double r24924 = r24921 * r24923;
        double r24925 = 1/360;
        double r24926 = 6;
        double r24927 = pow(r24918, r24926);
        double r24928 = r24925 * r24927;
        double r24929 = r24924 + r24928;
        double r24930 = r24920 + r24929;
        return r24930;
}

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 r24931, r24932, r24933, r24934, r24935, r24936, r24937;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r24931);
        mpfr_init(r24932);
        mpfr_init_set_str(r24933, "2", 10, MPFR_RNDN);
        mpfr_init(r24934);
        mpfr_init(r24935);
        mpfr_init(r24936);
        mpfr_init(r24937);
}

double f_im(double x) {
        mpfr_set_d(r24931, x, MPFR_RNDN);
        mpfr_exp(r24932, r24931, MPFR_RNDN);
        ;
        mpfr_sub(r24934, r24932, r24933, MPFR_RNDN);
        mpfr_neg(r24935, r24931, MPFR_RNDN);
        mpfr_exp(r24936, r24935, MPFR_RNDN);
        mpfr_add(r24937, r24934, r24936, MPFR_RNDN);
        return mpfr_get_d(r24937, MPFR_RNDN);
}

static mpfr_t r24938, r24939, r24940, r24941, r24942, r24943, r24944, r24945, r24946, r24947, r24948, r24949, r24950;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r24938);
        mpfr_init_set_str(r24939, "2", 10, MPFR_RNDN);
        mpfr_init(r24940);
        mpfr_init_set_str(r24941, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r24942, "4", 10, MPFR_RNDN);
        mpfr_init(r24943);
        mpfr_init(r24944);
        mpfr_init_set_str(r24945, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r24946, "6", 10, MPFR_RNDN);
        mpfr_init(r24947);
        mpfr_init(r24948);
        mpfr_init(r24949);
        mpfr_init(r24950);
}

double f_fm(double x) {
        mpfr_set_d(r24938, x, MPFR_RNDN);
        ;
        mpfr_pow(r24940, r24938, r24939, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24943, r24938, r24942, MPFR_RNDN);
        mpfr_mul(r24944, r24941, r24943, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24947, r24938, r24946, MPFR_RNDN);
        mpfr_mul(r24948, r24945, r24947, MPFR_RNDN);
        mpfr_add(r24949, r24944, r24948, MPFR_RNDN);
        mpfr_add(r24950, r24940, r24949, MPFR_RNDN);
        return mpfr_get_d(r24950, MPFR_RNDN);
}

static mpfr_t r24951, r24952, r24953, r24954, r24955, r24956, r24957, r24958, r24959, r24960, r24961, r24962, r24963;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r24951);
        mpfr_init_set_str(r24952, "2", 10, MPFR_RNDN);
        mpfr_init(r24953);
        mpfr_init_set_str(r24954, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r24955, "4", 10, MPFR_RNDN);
        mpfr_init(r24956);
        mpfr_init(r24957);
        mpfr_init_set_str(r24958, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r24959, "6", 10, MPFR_RNDN);
        mpfr_init(r24960);
        mpfr_init(r24961);
        mpfr_init(r24962);
        mpfr_init(r24963);
}

double f_dm(double x) {
        mpfr_set_d(r24951, x, MPFR_RNDN);
        ;
        mpfr_pow(r24953, r24951, r24952, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24956, r24951, r24955, MPFR_RNDN);
        mpfr_mul(r24957, r24954, r24956, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r24960, r24951, r24959, MPFR_RNDN);
        mpfr_mul(r24961, r24958, r24960, MPFR_RNDN);
        mpfr_add(r24962, r24957, r24961, MPFR_RNDN);
        mpfr_add(r24963, r24953, r24962, MPFR_RNDN);
        return mpfr_get_d(r24963, MPFR_RNDN);
}

