#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 r10862 = x;
        float r10863 = exp(r10862);
        float r10864 = 2;
        float r10865 = r10863 - r10864;
        float r10866 = -r10862;
        float r10867 = exp(r10866);
        float r10868 = r10865 + r10867;
        return r10868;
}

double f_id(double x) {
        double r10869 = x;
        double r10870 = exp(r10869);
        double r10871 = 2;
        double r10872 = r10870 - r10871;
        double r10873 = -r10869;
        double r10874 = exp(r10873);
        double r10875 = r10872 + r10874;
        return r10875;
}


double f_of(float x) {
        float r10876 = 1/12;
        float r10877 = x;
        float r10878 = 4;
        float r10879 = pow(r10877, r10878);
        float r10880 = 1/360;
        float r10881 = 6;
        float r10882 = pow(r10877, r10881);
        float r10883 = r10877 * r10877;
        float r10884 = fma(r10880, r10882, r10883);
        float r10885 = fma(r10876, r10879, r10884);
        return r10885;
}

double f_od(double x) {
        double r10886 = 1/12;
        double r10887 = x;
        double r10888 = 4;
        double r10889 = pow(r10887, r10888);
        double r10890 = 1/360;
        double r10891 = 6;
        double r10892 = pow(r10887, r10891);
        double r10893 = r10887 * r10887;
        double r10894 = fma(r10890, r10892, r10893);
        double r10895 = fma(r10886, r10889, r10894);
        return r10895;
}

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 r10896, r10897, r10898, r10899, r10900, r10901, r10902;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10896);
        mpfr_init(r10897);
        mpfr_init_set_str(r10898, "2", 10, MPFR_RNDN);
        mpfr_init(r10899);
        mpfr_init(r10900);
        mpfr_init(r10901);
        mpfr_init(r10902);
}

double f_im(double x) {
        mpfr_set_d(r10896, x, MPFR_RNDN);
        mpfr_exp(r10897, r10896, MPFR_RNDN);
        ;
        mpfr_sub(r10899, r10897, r10898, MPFR_RNDN);
        mpfr_neg(r10900, r10896, MPFR_RNDN);
        mpfr_exp(r10901, r10900, MPFR_RNDN);
        mpfr_add(r10902, r10899, r10901, MPFR_RNDN);
        return mpfr_get_d(r10902, MPFR_RNDN);
}

static mpfr_t r10903, r10904, r10905, r10906, r10907, r10908, r10909, r10910, r10911, r10912;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r10903, "1/12", 10, MPFR_RNDN);
        mpfr_init(r10904);
        mpfr_init_set_str(r10905, "4", 10, MPFR_RNDN);
        mpfr_init(r10906);
        mpfr_init_set_str(r10907, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r10908, "6", 10, MPFR_RNDN);
        mpfr_init(r10909);
        mpfr_init(r10910);
        mpfr_init(r10911);
        mpfr_init(r10912);
}

double f_fm(double x) {
        ;
        mpfr_set_d(r10904, x, MPFR_RNDN);
        ;
        mpfr_pow(r10906, r10904, r10905, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r10909, r10904, r10908, MPFR_RNDN);
        mpfr_mul(r10910, r10904, r10904, MPFR_RNDN);
        mpfr_fma(r10911, r10907, r10909, r10910, MPFR_RNDN);
        mpfr_fma(r10912, r10903, r10906, r10911, MPFR_RNDN);
        return mpfr_get_d(r10912, MPFR_RNDN);
}

static mpfr_t r10913, r10914, r10915, r10916, r10917, r10918, r10919, r10920, r10921, r10922;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init_set_str(r10913, "1/12", 10, MPFR_RNDN);
        mpfr_init(r10914);
        mpfr_init_set_str(r10915, "4", 10, MPFR_RNDN);
        mpfr_init(r10916);
        mpfr_init_set_str(r10917, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r10918, "6", 10, MPFR_RNDN);
        mpfr_init(r10919);
        mpfr_init(r10920);
        mpfr_init(r10921);
        mpfr_init(r10922);
}

double f_dm(double x) {
        ;
        mpfr_set_d(r10914, x, MPFR_RNDN);
        ;
        mpfr_pow(r10916, r10914, r10915, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r10919, r10914, r10918, MPFR_RNDN);
        mpfr_mul(r10920, r10914, r10914, MPFR_RNDN);
        mpfr_fma(r10921, r10917, r10919, r10920, MPFR_RNDN);
        mpfr_fma(r10922, r10913, r10916, r10921, MPFR_RNDN);
        return mpfr_get_d(r10922, MPFR_RNDN);
}

