#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 r36046 = x;
        float r36047 = y;
        float r36048 = r36046 + r36047;
        float r36049 = z;
        float r36050 = r36048 + r36049;
        float r36051 = r36047 + r36049;
        float r36052 = r36046 + r36051;
        float r36053 = r36050 - r36052;
        return r36053;
}

double f_id(double x, double y, double z) {
        double r36054 = x;
        double r36055 = y;
        double r36056 = r36054 + r36055;
        double r36057 = z;
        double r36058 = r36056 + r36057;
        double r36059 = r36055 + r36057;
        double r36060 = r36054 + r36059;
        double r36061 = r36058 - r36060;
        return r36061;
}


double f_of(float x, float y, float z) {
        float r36062 = x;
        float r36063 = y;
        float r36064 = r36062 + r36063;
        float r36065 = z;
        float r36066 = r36064 + r36065;
        float r36067 = r36063 + r36065;
        float r36068 = r36062 + r36067;
        float r36069 = r36066 - r36068;
        return r36069;
}

double f_od(double x, double y, double z) {
        double r36070 = x;
        double r36071 = y;
        double r36072 = r36070 + r36071;
        double r36073 = z;
        double r36074 = r36072 + r36073;
        double r36075 = r36071 + r36073;
        double r36076 = r36070 + r36075;
        double r36077 = r36074 - r36076;
        return r36077;
}

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 r36078, r36079, r36080, r36081, r36082, r36083, r36084, r36085;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1936);
        mpfr_init(r36078);
        mpfr_init(r36079);
        mpfr_init(r36080);
        mpfr_init(r36081);
        mpfr_init(r36082);
        mpfr_init(r36083);
        mpfr_init(r36084);
        mpfr_init(r36085);
}

double f_im(double x, double y, double z) {
        mpfr_set_d(r36078, x, MPFR_RNDN);
        mpfr_set_d(r36079, y, MPFR_RNDN);
        mpfr_add(r36080, r36078, r36079, MPFR_RNDN);
        mpfr_set_d(r36081, z, MPFR_RNDN);
        mpfr_add(r36082, r36080, r36081, MPFR_RNDN);
        mpfr_add(r36083, r36079, r36081, MPFR_RNDN);
        mpfr_add(r36084, r36078, r36083, MPFR_RNDN);
        mpfr_sub(r36085, r36082, r36084, MPFR_RNDN);
        return mpfr_get_d(r36085, MPFR_RNDN);
}

static mpfr_t r36086, r36087, r36088, r36089, r36090, r36091, r36092, r36093;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r36086);
        mpfr_init(r36087);
        mpfr_init(r36088);
        mpfr_init(r36089);
        mpfr_init(r36090);
        mpfr_init(r36091);
        mpfr_init(r36092);
        mpfr_init(r36093);
}

double f_fm(double x, double y, double z) {
        mpfr_set_d(r36086, x, MPFR_RNDN);
        mpfr_set_d(r36087, y, MPFR_RNDN);
        mpfr_add(r36088, r36086, r36087, MPFR_RNDN);
        mpfr_set_d(r36089, z, MPFR_RNDN);
        mpfr_add(r36090, r36088, r36089, MPFR_RNDN);
        mpfr_add(r36091, r36087, r36089, MPFR_RNDN);
        mpfr_add(r36092, r36086, r36091, MPFR_RNDN);
        mpfr_sub(r36093, r36090, r36092, MPFR_RNDN);
        return mpfr_get_d(r36093, MPFR_RNDN);
}

static mpfr_t r36094, r36095, r36096, r36097, r36098, r36099, r36100, r36101;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1936);
        mpfr_init(r36094);
        mpfr_init(r36095);
        mpfr_init(r36096);
        mpfr_init(r36097);
        mpfr_init(r36098);
        mpfr_init(r36099);
        mpfr_init(r36100);
        mpfr_init(r36101);
}

double f_dm(double x, double y, double z) {
        mpfr_set_d(r36094, x, MPFR_RNDN);
        mpfr_set_d(r36095, y, MPFR_RNDN);
        mpfr_add(r36096, r36094, r36095, MPFR_RNDN);
        mpfr_set_d(r36097, z, MPFR_RNDN);
        mpfr_add(r36098, r36096, r36097, MPFR_RNDN);
        mpfr_add(r36099, r36095, r36097, MPFR_RNDN);
        mpfr_add(r36100, r36094, r36099, MPFR_RNDN);
        mpfr_sub(r36101, r36098, r36100, MPFR_RNDN);
        return mpfr_get_d(r36101, MPFR_RNDN);
}

