#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 r49087 = a;
        float r49088 = b;
        float r49089 = c;
        float r49090 = d;
        float r49091 = r49089 + r49090;
        float r49092 = r49088 + r49091;
        float r49093 = r49087 + r49092;
        float r49094 = 2.0f;
        float r49095 = r49093 * r49094;
        return r49095;
}

double f_id(double a, double b, double c, double d) {
        double r49096 = a;
        double r49097 = b;
        double r49098 = c;
        double r49099 = d;
        double r49100 = r49098 + r49099;
        double r49101 = r49097 + r49100;
        double r49102 = r49096 + r49101;
        double r49103 = 2.0;
        double r49104 = r49102 * r49103;
        return r49104;
}


double f_of(float a, float b, float c, float d) {
        float r49105 = a;
        float r49106 = b;
        float r49107 = c;
        float r49108 = d;
        float r49109 = r49107 + r49108;
        float r49110 = r49106 + r49109;
        float r49111 = r49105 + r49110;
        float r49112 = 2.0f;
        float r49113 = r49111 * r49112;
        return r49113;
}

double f_od(double a, double b, double c, double d) {
        double r49114 = a;
        double r49115 = b;
        double r49116 = c;
        double r49117 = d;
        double r49118 = r49116 + r49117;
        double r49119 = r49115 + r49118;
        double r49120 = r49114 + r49119;
        double r49121 = 2.0;
        double r49122 = r49120 * r49121;
        return r49122;
}

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 r49123, r49124, r49125, r49126, r49127, r49128, r49129, r49130, r49131;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(144);
        mpfr_init(r49123);
        mpfr_init(r49124);
        mpfr_init(r49125);
        mpfr_init(r49126);
        mpfr_init(r49127);
        mpfr_init(r49128);
        mpfr_init(r49129);
        mpfr_init_set_str(r49130, "2", 10, MPFR_RNDN);
        mpfr_init(r49131);
}

double f_im(double a, double b, double c, double d) {
        mpfr_set_d(r49123, a, MPFR_RNDN);
        mpfr_set_d(r49124, b, MPFR_RNDN);
        mpfr_set_d(r49125, c, MPFR_RNDN);
        mpfr_set_d(r49126, d, MPFR_RNDN);
        mpfr_add(r49127, r49125, r49126, MPFR_RNDN);
        mpfr_add(r49128, r49124, r49127, MPFR_RNDN);
        mpfr_add(r49129, r49123, r49128, MPFR_RNDN);
        ;
        mpfr_mul(r49131, r49129, r49130, MPFR_RNDN);
        return mpfr_get_d(r49131, MPFR_RNDN);
}

static mpfr_t r49132, r49133, r49134, r49135, r49136, r49137, r49138, r49139, r49140;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(144);
        mpfr_init(r49132);
        mpfr_init(r49133);
        mpfr_init(r49134);
        mpfr_init(r49135);
        mpfr_init(r49136);
        mpfr_init(r49137);
        mpfr_init(r49138);
        mpfr_init_set_str(r49139, "2", 10, MPFR_RNDN);
        mpfr_init(r49140);
}

double f_fm(double a, double b, double c, double d) {
        mpfr_set_d(r49132, a, MPFR_RNDN);
        mpfr_set_d(r49133, b, MPFR_RNDN);
        mpfr_set_d(r49134, c, MPFR_RNDN);
        mpfr_set_d(r49135, d, MPFR_RNDN);
        mpfr_add(r49136, r49134, r49135, MPFR_RNDN);
        mpfr_add(r49137, r49133, r49136, MPFR_RNDN);
        mpfr_add(r49138, r49132, r49137, MPFR_RNDN);
        ;
        mpfr_mul(r49140, r49138, r49139, MPFR_RNDN);
        return mpfr_get_d(r49140, MPFR_RNDN);
}

static mpfr_t r49141, r49142, r49143, r49144, r49145, r49146, r49147, r49148, r49149;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(144);
        mpfr_init(r49141);
        mpfr_init(r49142);
        mpfr_init(r49143);
        mpfr_init(r49144);
        mpfr_init(r49145);
        mpfr_init(r49146);
        mpfr_init(r49147);
        mpfr_init_set_str(r49148, "2", 10, MPFR_RNDN);
        mpfr_init(r49149);
}

double f_dm(double a, double b, double c, double d) {
        mpfr_set_d(r49141, a, MPFR_RNDN);
        mpfr_set_d(r49142, b, MPFR_RNDN);
        mpfr_set_d(r49143, c, MPFR_RNDN);
        mpfr_set_d(r49144, d, MPFR_RNDN);
        mpfr_add(r49145, r49143, r49144, MPFR_RNDN);
        mpfr_add(r49146, r49142, r49145, MPFR_RNDN);
        mpfr_add(r49147, r49141, r49146, MPFR_RNDN);
        ;
        mpfr_mul(r49149, r49147, r49148, MPFR_RNDN);
        return mpfr_get_d(r49149, MPFR_RNDN);
}

