#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 r51495 = a;
        float r51496 = b;
        float r51497 = c;
        float r51498 = d;
        float r51499 = r51497 + r51498;
        float r51500 = r51496 + r51499;
        float r51501 = r51495 + r51500;
        float r51502 = 2;
        float r51503 = r51501 * r51502;
        return r51503;
}

double f_id(double a, double b, double c, double d) {
        double r51504 = a;
        double r51505 = b;
        double r51506 = c;
        double r51507 = d;
        double r51508 = r51506 + r51507;
        double r51509 = r51505 + r51508;
        double r51510 = r51504 + r51509;
        double r51511 = 2;
        double r51512 = r51510 * r51511;
        return r51512;
}


double f_of(float a, float b, float c, float d) {
        float r51513 = a;
        float r51514 = b;
        float r51515 = c;
        float r51516 = d;
        float r51517 = r51515 + r51516;
        float r51518 = r51514 + r51517;
        float r51519 = r51513 + r51518;
        float r51520 = 2;
        float r51521 = r51519 * r51520;
        return r51521;
}

double f_od(double a, double b, double c, double d) {
        double r51522 = a;
        double r51523 = b;
        double r51524 = c;
        double r51525 = d;
        double r51526 = r51524 + r51525;
        double r51527 = r51523 + r51526;
        double r51528 = r51522 + r51527;
        double r51529 = 2;
        double r51530 = r51528 * r51529;
        return r51530;
}

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 r51531, r51532, r51533, r51534, r51535, r51536, r51537, r51538, r51539;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(400);
        mpfr_init(r51531);
        mpfr_init(r51532);
        mpfr_init(r51533);
        mpfr_init(r51534);
        mpfr_init(r51535);
        mpfr_init(r51536);
        mpfr_init(r51537);
        mpfr_init_set_str(r51538, "2", 10, MPFR_RNDN);
        mpfr_init(r51539);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r51531, a, MPFR_RNDN);
        mpfr_set_d(r51532, b, MPFR_RNDN);
        mpfr_set_d(r51533, c, MPFR_RNDN);
        mpfr_set_d(r51534, d, MPFR_RNDN);
        mpfr_add(r51535, r51533, r51534, MPFR_RNDN);
        mpfr_add(r51536, r51532, r51535, MPFR_RNDN);
        mpfr_add(r51537, r51531, r51536, MPFR_RNDN);
        ;
        mpfr_mul(r51539, r51537, r51538, MPFR_RNDN);
        return mpfr_get_d(r51539, MPFR_RNDN);
}

static mpfr_t r51540, r51541, r51542, r51543, r51544, r51545, r51546, r51547, r51548;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51540);
        mpfr_init(r51541);
        mpfr_init(r51542);
        mpfr_init(r51543);
        mpfr_init(r51544);
        mpfr_init(r51545);
        mpfr_init(r51546);
        mpfr_init_set_str(r51547, "2", 10, MPFR_RNDN);
        mpfr_init(r51548);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r51540, a, MPFR_RNDN);
        mpfr_set_d(r51541, b, MPFR_RNDN);
        mpfr_set_d(r51542, c, MPFR_RNDN);
        mpfr_set_d(r51543, d, MPFR_RNDN);
        mpfr_add(r51544, r51542, r51543, MPFR_RNDN);
        mpfr_add(r51545, r51541, r51544, MPFR_RNDN);
        mpfr_add(r51546, r51540, r51545, MPFR_RNDN);
        ;
        mpfr_mul(r51548, r51546, r51547, MPFR_RNDN);
        return mpfr_get_d(r51548, MPFR_RNDN);
}

static mpfr_t r51549, r51550, r51551, r51552, r51553, r51554, r51555, r51556, r51557;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(400);
        mpfr_init(r51549);
        mpfr_init(r51550);
        mpfr_init(r51551);
        mpfr_init(r51552);
        mpfr_init(r51553);
        mpfr_init(r51554);
        mpfr_init(r51555);
        mpfr_init_set_str(r51556, "2", 10, MPFR_RNDN);
        mpfr_init(r51557);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r51549, a, MPFR_RNDN);
        mpfr_set_d(r51550, b, MPFR_RNDN);
        mpfr_set_d(r51551, c, MPFR_RNDN);
        mpfr_set_d(r51552, d, MPFR_RNDN);
        mpfr_add(r51553, r51551, r51552, MPFR_RNDN);
        mpfr_add(r51554, r51550, r51553, MPFR_RNDN);
        mpfr_add(r51555, r51549, r51554, MPFR_RNDN);
        ;
        mpfr_mul(r51557, r51555, r51556, MPFR_RNDN);
        return mpfr_get_d(r51557, MPFR_RNDN);
}

