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

char *name = "Expression, p6";

double f_if(float a, float b, float c, float d) {
        float r51915 = a;
        float r51916 = b;
        float r51917 = c;
        float r51918 = d;
        float r51919 = r51917 + r51918;
        float r51920 = r51916 + r51919;
        float r51921 = r51915 + r51920;
        float r51922 = 2;
        float r51923 = r51921 * r51922;
        return r51923;
}

double f_id(double a, double b, double c, double d) {
        double r51924 = a;
        double r51925 = b;
        double r51926 = c;
        double r51927 = d;
        double r51928 = r51926 + r51927;
        double r51929 = r51925 + r51928;
        double r51930 = r51924 + r51929;
        double r51931 = 2;
        double r51932 = r51930 * r51931;
        return r51932;
}


double f_of(float a, float b, float c, float d) {
        float r51933 = a;
        float r51934 = b;
        float r51935 = c;
        float r51936 = d;
        float r51937 = r51935 + r51936;
        float r51938 = r51934 + r51937;
        float r51939 = r51933 + r51938;
        float r51940 = 2;
        float r51941 = r51939 * r51940;
        return r51941;
}

double f_od(double a, double b, double c, double d) {
        double r51942 = a;
        double r51943 = b;
        double r51944 = c;
        double r51945 = d;
        double r51946 = r51944 + r51945;
        double r51947 = r51943 + r51946;
        double r51948 = r51942 + r51947;
        double r51949 = 2;
        double r51950 = r51948 * r51949;
        return r51950;
}

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 r51951, r51952, r51953, r51954, r51955, r51956, r51957, r51958, r51959;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51951);
        mpfr_init(r51952);
        mpfr_init(r51953);
        mpfr_init(r51954);
        mpfr_init(r51955);
        mpfr_init(r51956);
        mpfr_init(r51957);
        mpfr_init_set_str(r51958, "2", 10, MPFR_RNDN);
        mpfr_init(r51959);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r51951, a, MPFR_RNDN);
        mpfr_set_d(r51952, b, MPFR_RNDN);
        mpfr_set_d(r51953, c, MPFR_RNDN);
        mpfr_set_d(r51954, d, MPFR_RNDN);
        mpfr_add(r51955, r51953, r51954, MPFR_RNDN);
        mpfr_add(r51956, r51952, r51955, MPFR_RNDN);
        mpfr_add(r51957, r51951, r51956, MPFR_RNDN);
        ;
        mpfr_mul(r51959, r51957, r51958, MPFR_RNDN);
        return mpfr_get_d(r51959, MPFR_RNDN);
}

static mpfr_t r51960, r51961, r51962, r51963, r51964, r51965, r51966, r51967, r51968;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51960);
        mpfr_init(r51961);
        mpfr_init(r51962);
        mpfr_init(r51963);
        mpfr_init(r51964);
        mpfr_init(r51965);
        mpfr_init(r51966);
        mpfr_init_set_str(r51967, "2", 10, MPFR_RNDN);
        mpfr_init(r51968);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r51960, a, MPFR_RNDN);
        mpfr_set_d(r51961, b, MPFR_RNDN);
        mpfr_set_d(r51962, c, MPFR_RNDN);
        mpfr_set_d(r51963, d, MPFR_RNDN);
        mpfr_add(r51964, r51962, r51963, MPFR_RNDN);
        mpfr_add(r51965, r51961, r51964, MPFR_RNDN);
        mpfr_add(r51966, r51960, r51965, MPFR_RNDN);
        ;
        mpfr_mul(r51968, r51966, r51967, MPFR_RNDN);
        return mpfr_get_d(r51968, MPFR_RNDN);
}

static mpfr_t r51969, r51970, r51971, r51972, r51973, r51974, r51975, r51976, r51977;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51969);
        mpfr_init(r51970);
        mpfr_init(r51971);
        mpfr_init(r51972);
        mpfr_init(r51973);
        mpfr_init(r51974);
        mpfr_init(r51975);
        mpfr_init_set_str(r51976, "2", 10, MPFR_RNDN);
        mpfr_init(r51977);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r51969, a, MPFR_RNDN);
        mpfr_set_d(r51970, b, MPFR_RNDN);
        mpfr_set_d(r51971, c, MPFR_RNDN);
        mpfr_set_d(r51972, d, MPFR_RNDN);
        mpfr_add(r51973, r51971, r51972, MPFR_RNDN);
        mpfr_add(r51974, r51970, r51973, MPFR_RNDN);
        mpfr_add(r51975, r51969, r51974, MPFR_RNDN);
        ;
        mpfr_mul(r51977, r51975, r51976, MPFR_RNDN);
        return mpfr_get_d(r51977, MPFR_RNDN);
}

