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

char *name = "Expression 1, p15";

double f_if(float a, float b, float c, float d, float e) {
        float r51972 = e;
        float r51973 = d;
        float r51974 = r51972 + r51973;
        float r51975 = c;
        float r51976 = r51974 + r51975;
        float r51977 = b;
        float r51978 = r51976 + r51977;
        float r51979 = a;
        float r51980 = r51978 + r51979;
        return r51980;
}

double f_id(double a, double b, double c, double d, double e) {
        double r51981 = e;
        double r51982 = d;
        double r51983 = r51981 + r51982;
        double r51984 = c;
        double r51985 = r51983 + r51984;
        double r51986 = b;
        double r51987 = r51985 + r51986;
        double r51988 = a;
        double r51989 = r51987 + r51988;
        return r51989;
}


double f_of(float a, float b, float c, float d, float e) {
        float r51990 = e;
        float r51991 = d;
        float r51992 = r51990 + r51991;
        float r51993 = c;
        float r51994 = r51992 + r51993;
        float r51995 = b;
        float r51996 = r51994 + r51995;
        float r51997 = a;
        float r51998 = r51996 + r51997;
        return r51998;
}

double f_od(double a, double b, double c, double d, double e) {
        double r51999 = e;
        double r52000 = d;
        double r52001 = r51999 + r52000;
        double r52002 = c;
        double r52003 = r52001 + r52002;
        double r52004 = b;
        double r52005 = r52003 + r52004;
        double r52006 = a;
        double r52007 = r52005 + r52006;
        return r52007;
}

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 r52008, r52009, r52010, r52011, r52012, r52013, r52014, r52015, r52016;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52008);
        mpfr_init(r52009);
        mpfr_init(r52010);
        mpfr_init(r52011);
        mpfr_init(r52012);
        mpfr_init(r52013);
        mpfr_init(r52014);
        mpfr_init(r52015);
        mpfr_init(r52016);
}

double f_im(double a, double b, double c, double d, double e) {
        mpfr_set_d(r52008, e, MPFR_RNDN);
        mpfr_set_d(r52009, d, MPFR_RNDN);
        mpfr_add(r52010, r52008, r52009, MPFR_RNDN);
        mpfr_set_d(r52011, c, MPFR_RNDN);
        mpfr_add(r52012, r52010, r52011, MPFR_RNDN);
        mpfr_set_d(r52013, b, MPFR_RNDN);
        mpfr_add(r52014, r52012, r52013, MPFR_RNDN);
        mpfr_set_d(r52015, a, MPFR_RNDN);
        mpfr_add(r52016, r52014, r52015, MPFR_RNDN);
        return mpfr_get_d(r52016, MPFR_RNDN);
}

static mpfr_t r52017, r52018, r52019, r52020, r52021, r52022, r52023, r52024, r52025;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52017);
        mpfr_init(r52018);
        mpfr_init(r52019);
        mpfr_init(r52020);
        mpfr_init(r52021);
        mpfr_init(r52022);
        mpfr_init(r52023);
        mpfr_init(r52024);
        mpfr_init(r52025);
}

double f_fm(double a, double b, double c, double d, double e) {
        mpfr_set_d(r52017, e, MPFR_RNDN);
        mpfr_set_d(r52018, d, MPFR_RNDN);
        mpfr_add(r52019, r52017, r52018, MPFR_RNDN);
        mpfr_set_d(r52020, c, MPFR_RNDN);
        mpfr_add(r52021, r52019, r52020, MPFR_RNDN);
        mpfr_set_d(r52022, b, MPFR_RNDN);
        mpfr_add(r52023, r52021, r52022, MPFR_RNDN);
        mpfr_set_d(r52024, a, MPFR_RNDN);
        mpfr_add(r52025, r52023, r52024, MPFR_RNDN);
        return mpfr_get_d(r52025, MPFR_RNDN);
}

static mpfr_t r52026, r52027, r52028, r52029, r52030, r52031, r52032, r52033, r52034;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52026);
        mpfr_init(r52027);
        mpfr_init(r52028);
        mpfr_init(r52029);
        mpfr_init(r52030);
        mpfr_init(r52031);
        mpfr_init(r52032);
        mpfr_init(r52033);
        mpfr_init(r52034);
}

double f_dm(double a, double b, double c, double d, double e) {
        mpfr_set_d(r52026, e, MPFR_RNDN);
        mpfr_set_d(r52027, d, MPFR_RNDN);
        mpfr_add(r52028, r52026, r52027, MPFR_RNDN);
        mpfr_set_d(r52029, c, MPFR_RNDN);
        mpfr_add(r52030, r52028, r52029, MPFR_RNDN);
        mpfr_set_d(r52031, b, MPFR_RNDN);
        mpfr_add(r52032, r52030, r52031, MPFR_RNDN);
        mpfr_set_d(r52033, a, MPFR_RNDN);
        mpfr_add(r52034, r52032, r52033, MPFR_RNDN);
        return mpfr_get_d(r52034, MPFR_RNDN);
}

