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

char *name = "Commute and associate";

double f_if(float x, float y, float z) {
        float r54140 = x;
        float r54141 = y;
        float r54142 = r54140 + r54141;
        float r54143 = z;
        float r54144 = r54142 + r54143;
        float r54145 = r54141 + r54143;
        float r54146 = r54140 + r54145;
        float r54147 = r54144 - r54146;
        return r54147;
}

double f_id(double x, double y, double z) {
        double r54148 = x;
        double r54149 = y;
        double r54150 = r54148 + r54149;
        double r54151 = z;
        double r54152 = r54150 + r54151;
        double r54153 = r54149 + r54151;
        double r54154 = r54148 + r54153;
        double r54155 = r54152 - r54154;
        return r54155;
}


double f_of(float x, float y, float z) {
        float r54156 = x;
        float r54157 = y;
        float r54158 = r54156 + r54157;
        float r54159 = z;
        float r54160 = r54158 + r54159;
        float r54161 = r54157 + r54159;
        float r54162 = r54156 + r54161;
        float r54163 = r54160 - r54162;
        return r54163;
}

double f_od(double x, double y, double z) {
        double r54164 = x;
        double r54165 = y;
        double r54166 = r54164 + r54165;
        double r54167 = z;
        double r54168 = r54166 + r54167;
        double r54169 = r54165 + r54167;
        double r54170 = r54164 + r54169;
        double r54171 = r54168 - r54170;
        return r54171;
}

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 r54172, r54173, r54174, r54175, r54176, r54177, r54178, r54179;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(2192);
        mpfr_init(r54172);
        mpfr_init(r54173);
        mpfr_init(r54174);
        mpfr_init(r54175);
        mpfr_init(r54176);
        mpfr_init(r54177);
        mpfr_init(r54178);
        mpfr_init(r54179);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r54172, x, MPFR_RNDN);
        mpfr_set_d(r54173, y, MPFR_RNDN);
        mpfr_add(r54174, r54172, r54173, MPFR_RNDN);
        mpfr_set_d(r54175, z, MPFR_RNDN);
        mpfr_add(r54176, r54174, r54175, MPFR_RNDN);
        mpfr_add(r54177, r54173, r54175, MPFR_RNDN);
        mpfr_add(r54178, r54172, r54177, MPFR_RNDN);
        mpfr_sub(r54179, r54176, r54178, MPFR_RNDN);
        return mpfr_get_d(r54179, MPFR_RNDN);
}

static mpfr_t r54180, r54181, r54182, r54183, r54184, r54185, r54186, r54187;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r54180);
        mpfr_init(r54181);
        mpfr_init(r54182);
        mpfr_init(r54183);
        mpfr_init(r54184);
        mpfr_init(r54185);
        mpfr_init(r54186);
        mpfr_init(r54187);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r54180, x, MPFR_RNDN);
        mpfr_set_d(r54181, y, MPFR_RNDN);
        mpfr_add(r54182, r54180, r54181, MPFR_RNDN);
        mpfr_set_d(r54183, z, MPFR_RNDN);
        mpfr_add(r54184, r54182, r54183, MPFR_RNDN);
        mpfr_add(r54185, r54181, r54183, MPFR_RNDN);
        mpfr_add(r54186, r54180, r54185, MPFR_RNDN);
        mpfr_sub(r54187, r54184, r54186, MPFR_RNDN);
        return mpfr_get_d(r54187, MPFR_RNDN);
}

static mpfr_t r54188, r54189, r54190, r54191, r54192, r54193, r54194, r54195;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(2192);
        mpfr_init(r54188);
        mpfr_init(r54189);
        mpfr_init(r54190);
        mpfr_init(r54191);
        mpfr_init(r54192);
        mpfr_init(r54193);
        mpfr_init(r54194);
        mpfr_init(r54195);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r54188, x, MPFR_RNDN);
        mpfr_set_d(r54189, y, MPFR_RNDN);
        mpfr_add(r54190, r54188, r54189, MPFR_RNDN);
        mpfr_set_d(r54191, z, MPFR_RNDN);
        mpfr_add(r54192, r54190, r54191, MPFR_RNDN);
        mpfr_add(r54193, r54189, r54191, MPFR_RNDN);
        mpfr_add(r54194, r54188, r54193, MPFR_RNDN);
        mpfr_sub(r54195, r54192, r54194, MPFR_RNDN);
        return mpfr_get_d(r54195, MPFR_RNDN);
}

