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

char *name = "Expression 3, p15";

double f_if(float x) {
        float r50988 = x;
        float r50989 = r50988 * r50988;
        float r50990 = r50988 * r50989;
        float r50991 = r50990 + r50989;
        return r50991;
}

double f_id(double x) {
        double r50992 = x;
        double r50993 = r50992 * r50992;
        double r50994 = r50992 * r50993;
        double r50995 = r50994 + r50993;
        return r50995;
}


double f_of(float x) {
        float r50996 = x;
        float r50997 = r50996 * r50996;
        float r50998 = r50996 * r50997;
        float r50999 = r50998 + r50997;
        return r50999;
}

double f_od(double x) {
        double r51000 = x;
        double r51001 = r51000 * r51000;
        double r51002 = r51000 * r51001;
        double r51003 = r51002 + r51001;
        return r51003;
}

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 r51004, r51005, r51006, r51007;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51004);
        mpfr_init(r51005);
        mpfr_init(r51006);
        mpfr_init(r51007);
}

double f_im(double x) {
        mpfr_set_d(r51004, x, MPFR_RNDN);
        mpfr_mul(r51005, r51004, r51004, MPFR_RNDN);
        mpfr_mul(r51006, r51004, r51005, MPFR_RNDN);
        mpfr_add(r51007, r51006, r51005, MPFR_RNDN);
        return mpfr_get_d(r51007, MPFR_RNDN);
}

static mpfr_t r51008, r51009, r51010, r51011;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51008);
        mpfr_init(r51009);
        mpfr_init(r51010);
        mpfr_init(r51011);
}

double f_fm(double x) {
        mpfr_set_d(r51008, x, MPFR_RNDN);
        mpfr_mul(r51009, r51008, r51008, MPFR_RNDN);
        mpfr_mul(r51010, r51008, r51009, MPFR_RNDN);
        mpfr_add(r51011, r51010, r51009, MPFR_RNDN);
        return mpfr_get_d(r51011, MPFR_RNDN);
}

static mpfr_t r51012, r51013, r51014, r51015;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51012);
        mpfr_init(r51013);
        mpfr_init(r51014);
        mpfr_init(r51015);
}

double f_dm(double x) {
        mpfr_set_d(r51012, x, MPFR_RNDN);
        mpfr_mul(r51013, r51012, r51012, MPFR_RNDN);
        mpfr_mul(r51014, r51012, r51013, MPFR_RNDN);
        mpfr_add(r51015, r51014, r51013, MPFR_RNDN);
        return mpfr_get_d(r51015, MPFR_RNDN);
}

