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

char *name = "NMSE problem 3.3.7";

double f_if(float x) {
        float r5353861 = x;
        float r5353862 = exp(r5353861);
        float r5353863 = 2.0f;
        float r5353864 = r5353862 - r5353863;
        float r5353865 = -r5353861;
        float r5353866 = exp(r5353865);
        float r5353867 = r5353864 + r5353866;
        return r5353867;
}

double f_id(double x) {
        double r5353868 = x;
        double r5353869 = exp(r5353868);
        double r5353870 = 2.0;
        double r5353871 = r5353869 - r5353870;
        double r5353872 = -r5353868;
        double r5353873 = exp(r5353872);
        double r5353874 = r5353871 + r5353873;
        return r5353874;
}


double f_of(float x) {
        float r5353875 = x;
        float r5353876 = r5353875 * r5353875;
        float r5353877 = 0.002777777777777778f;
        float r5353878 = 6.0f;
        float r5353879 = pow(r5353875, r5353878);
        float r5353880 = r5353877 * r5353879;
        float r5353881 = 0.08333333333333333f;
        float r5353882 = 4.0f;
        float r5353883 = pow(r5353875, r5353882);
        float r5353884 = r5353881 * r5353883;
        float r5353885 = r5353880 + r5353884;
        float r5353886 = r5353876 + r5353885;
        return r5353886;
}

double f_od(double x) {
        double r5353887 = x;
        double r5353888 = r5353887 * r5353887;
        double r5353889 = 0.002777777777777778;
        double r5353890 = 6.0;
        double r5353891 = pow(r5353887, r5353890);
        double r5353892 = r5353889 * r5353891;
        double r5353893 = 0.08333333333333333;
        double r5353894 = 4.0;
        double r5353895 = pow(r5353887, r5353894);
        double r5353896 = r5353893 * r5353895;
        double r5353897 = r5353892 + r5353896;
        double r5353898 = r5353888 + r5353897;
        return r5353898;
}

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 r5353899, r5353900, r5353901, r5353902, r5353903, r5353904, r5353905;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353899);
        mpfr_init(r5353900);
        mpfr_init_set_str(r5353901, "2", 10, MPFR_RNDN);
        mpfr_init(r5353902);
        mpfr_init(r5353903);
        mpfr_init(r5353904);
        mpfr_init(r5353905);
}

double f_im(double x) {
        mpfr_set_d(r5353899, x, MPFR_RNDN);
        mpfr_exp(r5353900, r5353899, MPFR_RNDN);
        ;
        mpfr_sub(r5353902, r5353900, r5353901, MPFR_RNDN);
        mpfr_neg(r5353903, r5353899, MPFR_RNDN);
        mpfr_exp(r5353904, r5353903, MPFR_RNDN);
        mpfr_add(r5353905, r5353902, r5353904, MPFR_RNDN);
        return mpfr_get_d(r5353905, MPFR_RNDN);
}

static mpfr_t r5353906, r5353907, r5353908, r5353909, r5353910, r5353911, r5353912, r5353913, r5353914, r5353915, r5353916, r5353917;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353906);
        mpfr_init(r5353907);
        mpfr_init_set_str(r5353908, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r5353909, "6", 10, MPFR_RNDN);
        mpfr_init(r5353910);
        mpfr_init(r5353911);
        mpfr_init_set_str(r5353912, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r5353913, "4", 10, MPFR_RNDN);
        mpfr_init(r5353914);
        mpfr_init(r5353915);
        mpfr_init(r5353916);
        mpfr_init(r5353917);
}

double f_fm(double x) {
        mpfr_set_d(r5353906, x, MPFR_RNDN);
        mpfr_sqr(r5353907, r5353906, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5353910, r5353906, r5353909, MPFR_RNDN);
        mpfr_mul(r5353911, r5353908, r5353910, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5353914, r5353906, r5353913, MPFR_RNDN);
        mpfr_mul(r5353915, r5353912, r5353914, MPFR_RNDN);
        mpfr_add(r5353916, r5353911, r5353915, MPFR_RNDN);
        mpfr_add(r5353917, r5353907, r5353916, MPFR_RNDN);
        return mpfr_get_d(r5353917, MPFR_RNDN);
}

static mpfr_t r5353918, r5353919, r5353920, r5353921, r5353922, r5353923, r5353924, r5353925, r5353926, r5353927, r5353928, r5353929;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r5353918);
        mpfr_init(r5353919);
        mpfr_init_set_str(r5353920, "1/360", 10, MPFR_RNDN);
        mpfr_init_set_str(r5353921, "6", 10, MPFR_RNDN);
        mpfr_init(r5353922);
        mpfr_init(r5353923);
        mpfr_init_set_str(r5353924, "1/12", 10, MPFR_RNDN);
        mpfr_init_set_str(r5353925, "4", 10, MPFR_RNDN);
        mpfr_init(r5353926);
        mpfr_init(r5353927);
        mpfr_init(r5353928);
        mpfr_init(r5353929);
}

double f_dm(double x) {
        mpfr_set_d(r5353918, x, MPFR_RNDN);
        mpfr_sqr(r5353919, r5353918, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5353922, r5353918, r5353921, MPFR_RNDN);
        mpfr_mul(r5353923, r5353920, r5353922, MPFR_RNDN);
        ;
        ;
        mpfr_pow(r5353926, r5353918, r5353925, MPFR_RNDN);
        mpfr_mul(r5353927, r5353924, r5353926, MPFR_RNDN);
        mpfr_add(r5353928, r5353923, r5353927, MPFR_RNDN);
        mpfr_add(r5353929, r5353919, r5353928, MPFR_RNDN);
        return mpfr_get_d(r5353929, MPFR_RNDN);
}

