#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 r51037 = e;
        float r51038 = d;
        float r51039 = r51037 + r51038;
        float r51040 = c;
        float r51041 = r51039 + r51040;
        float r51042 = b;
        float r51043 = r51041 + r51042;
        float r51044 = a;
        float r51045 = r51043 + r51044;
        return r51045;
}

double f_id(double a, double b, double c, double d, double e) {
        double r51046 = e;
        double r51047 = d;
        double r51048 = r51046 + r51047;
        double r51049 = c;
        double r51050 = r51048 + r51049;
        double r51051 = b;
        double r51052 = r51050 + r51051;
        double r51053 = a;
        double r51054 = r51052 + r51053;
        return r51054;
}


double f_of(float a, float b, float c, float d, float e) {
        float r51055 = e;
        float r51056 = d;
        float r51057 = r51055 + r51056;
        float r51058 = c;
        float r51059 = r51057 + r51058;
        float r51060 = b;
        float r51061 = a;
        float r51062 = r51060 + r51061;
        float r51063 = r51059 + r51062;
        return r51063;
}

double f_od(double a, double b, double c, double d, double e) {
        double r51064 = e;
        double r51065 = d;
        double r51066 = r51064 + r51065;
        double r51067 = c;
        double r51068 = r51066 + r51067;
        double r51069 = b;
        double r51070 = a;
        double r51071 = r51069 + r51070;
        double r51072 = r51068 + r51071;
        return r51072;
}

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 r51073, r51074, r51075, r51076, r51077, r51078, r51079, r51080, r51081;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51073);
        mpfr_init(r51074);
        mpfr_init(r51075);
        mpfr_init(r51076);
        mpfr_init(r51077);
        mpfr_init(r51078);
        mpfr_init(r51079);
        mpfr_init(r51080);
        mpfr_init(r51081);
}

double f_im(double a, double b, double c, double d, double e) {
        mpfr_set_d(r51073, e, MPFR_RNDN);
        mpfr_set_d(r51074, d, MPFR_RNDN);
        mpfr_add(r51075, r51073, r51074, MPFR_RNDN);
        mpfr_set_d(r51076, c, MPFR_RNDN);
        mpfr_add(r51077, r51075, r51076, MPFR_RNDN);
        mpfr_set_d(r51078, b, MPFR_RNDN);
        mpfr_add(r51079, r51077, r51078, MPFR_RNDN);
        mpfr_set_d(r51080, a, MPFR_RNDN);
        mpfr_add(r51081, r51079, r51080, MPFR_RNDN);
        return mpfr_get_d(r51081, MPFR_RNDN);
}

static mpfr_t r51082, r51083, r51084, r51085, r51086, r51087, r51088, r51089, r51090;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51082);
        mpfr_init(r51083);
        mpfr_init(r51084);
        mpfr_init(r51085);
        mpfr_init(r51086);
        mpfr_init(r51087);
        mpfr_init(r51088);
        mpfr_init(r51089);
        mpfr_init(r51090);
}

double f_fm(double a, double b, double c, double d, double e) {
        mpfr_set_d(r51082, e, MPFR_RNDN);
        mpfr_set_d(r51083, d, MPFR_RNDN);
        mpfr_add(r51084, r51082, r51083, MPFR_RNDN);
        mpfr_set_d(r51085, c, MPFR_RNDN);
        mpfr_add(r51086, r51084, r51085, MPFR_RNDN);
        mpfr_set_d(r51087, b, MPFR_RNDN);
        mpfr_set_d(r51088, a, MPFR_RNDN);
        mpfr_add(r51089, r51087, r51088, MPFR_RNDN);
        mpfr_add(r51090, r51086, r51089, MPFR_RNDN);
        return mpfr_get_d(r51090, MPFR_RNDN);
}

static mpfr_t r51091, r51092, r51093, r51094, r51095, r51096, r51097, r51098, r51099;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51091);
        mpfr_init(r51092);
        mpfr_init(r51093);
        mpfr_init(r51094);
        mpfr_init(r51095);
        mpfr_init(r51096);
        mpfr_init(r51097);
        mpfr_init(r51098);
        mpfr_init(r51099);
}

double f_dm(double a, double b, double c, double d, double e) {
        mpfr_set_d(r51091, e, MPFR_RNDN);
        mpfr_set_d(r51092, d, MPFR_RNDN);
        mpfr_add(r51093, r51091, r51092, MPFR_RNDN);
        mpfr_set_d(r51094, c, MPFR_RNDN);
        mpfr_add(r51095, r51093, r51094, MPFR_RNDN);
        mpfr_set_d(r51096, b, MPFR_RNDN);
        mpfr_set_d(r51097, a, MPFR_RNDN);
        mpfr_add(r51098, r51096, r51097, MPFR_RNDN);
        mpfr_add(r51099, r51095, r51098, MPFR_RNDN);
        return mpfr_get_d(r51099, MPFR_RNDN);
}

