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

char *name = "Expression, p14";

double f_if(float a, float b, float c, float d) {
        float r51978 = a;
        float r51979 = b;
        float r51980 = c;
        float r51981 = r51979 + r51980;
        float r51982 = d;
        float r51983 = r51981 + r51982;
        float r51984 = r51978 * r51983;
        return r51984;
}

double f_id(double a, double b, double c, double d) {
        double r51985 = a;
        double r51986 = b;
        double r51987 = c;
        double r51988 = r51986 + r51987;
        double r51989 = d;
        double r51990 = r51988 + r51989;
        double r51991 = r51985 * r51990;
        return r51991;
}


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

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

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 r52006, r52007, r52008, r52009, r52010, r52011, r52012;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r52006);
        mpfr_init(r52007);
        mpfr_init(r52008);
        mpfr_init(r52009);
        mpfr_init(r52010);
        mpfr_init(r52011);
        mpfr_init(r52012);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r52006, a, MPFR_RNDN);
        mpfr_set_d(r52007, b, MPFR_RNDN);
        mpfr_set_d(r52008, c, MPFR_RNDN);
        mpfr_add(r52009, r52007, r52008, MPFR_RNDN);
        mpfr_set_d(r52010, d, MPFR_RNDN);
        mpfr_add(r52011, r52009, r52010, MPFR_RNDN);
        mpfr_mul(r52012, r52006, r52011, MPFR_RNDN);
        return mpfr_get_d(r52012, MPFR_RNDN);
}

static mpfr_t r52013, r52014, r52015, r52016, r52017, r52018, r52019;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52013);
        mpfr_init(r52014);
        mpfr_init(r52015);
        mpfr_init(r52016);
        mpfr_init(r52017);
        mpfr_init(r52018);
        mpfr_init(r52019);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r52013, a, MPFR_RNDN);
        mpfr_set_d(r52014, b, MPFR_RNDN);
        mpfr_set_d(r52015, c, MPFR_RNDN);
        mpfr_add(r52016, r52014, r52015, MPFR_RNDN);
        mpfr_set_d(r52017, d, MPFR_RNDN);
        mpfr_add(r52018, r52016, r52017, MPFR_RNDN);
        mpfr_mul(r52019, r52013, r52018, MPFR_RNDN);
        return mpfr_get_d(r52019, MPFR_RNDN);
}

static mpfr_t r52020, r52021, r52022, r52023, r52024, r52025, r52026;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r52020);
        mpfr_init(r52021);
        mpfr_init(r52022);
        mpfr_init(r52023);
        mpfr_init(r52024);
        mpfr_init(r52025);
        mpfr_init(r52026);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r52020, a, MPFR_RNDN);
        mpfr_set_d(r52021, b, MPFR_RNDN);
        mpfr_set_d(r52022, c, MPFR_RNDN);
        mpfr_add(r52023, r52021, r52022, MPFR_RNDN);
        mpfr_set_d(r52024, d, MPFR_RNDN);
        mpfr_add(r52025, r52023, r52024, MPFR_RNDN);
        mpfr_mul(r52026, r52020, r52025, MPFR_RNDN);
        return mpfr_get_d(r52026, MPFR_RNDN);
}

