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

char *name = "(+ x (- (tan (+ y z)) (tan a)))";

double f_if(float x, float y, float z, float a) {
        float r27536 = x;
        float r27537 = y;
        float r27538 = z;
        float r27539 = r27537 + r27538;
        float r27540 = tan(r27539);
        float r27541 = a;
        float r27542 = tan(r27541);
        float r27543 = r27540 - r27542;
        float r27544 = r27536 + r27543;
        return r27544;
}

double f_id(double x, double y, double z, double a) {
        double r27545 = x;
        double r27546 = y;
        double r27547 = z;
        double r27548 = r27546 + r27547;
        double r27549 = tan(r27548);
        double r27550 = a;
        double r27551 = tan(r27550);
        double r27552 = r27549 - r27551;
        double r27553 = r27545 + r27552;
        return r27553;
}


double f_of(float x, float y, float z, float a) {
        float r27554 = x;
        float r27555 = y;
        float r27556 = tan(r27555);
        float r27557 = z;
        float r27558 = tan(r27557);
        float r27559 = r27556 + r27558;
        float r27560 = 1;
        float r27561 = r27558 * r27556;
        float r27562 = 3;
        float r27563 = pow(r27561, r27562);
        float r27564 = cbrt(r27563);
        float r27565 = r27560 - r27564;
        float r27566 = r27559 / r27565;
        float r27567 = a;
        float r27568 = tan(r27567);
        float r27569 = r27566 - r27568;
        float r27570 = r27554 + r27569;
        return r27570;
}

double f_od(double x, double y, double z, double a) {
        double r27571 = x;
        double r27572 = y;
        double r27573 = tan(r27572);
        double r27574 = z;
        double r27575 = tan(r27574);
        double r27576 = r27573 + r27575;
        double r27577 = 1;
        double r27578 = r27575 * r27573;
        double r27579 = 3;
        double r27580 = pow(r27578, r27579);
        double r27581 = cbrt(r27580);
        double r27582 = r27577 - r27581;
        double r27583 = r27576 / r27582;
        double r27584 = a;
        double r27585 = tan(r27584);
        double r27586 = r27583 - r27585;
        double r27587 = r27571 + r27586;
        return r27587;
}

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 r27588, r27589, r27590, r27591, r27592, r27593, r27594, r27595, r27596;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27588);
        mpfr_init(r27589);
        mpfr_init(r27590);
        mpfr_init(r27591);
        mpfr_init(r27592);
        mpfr_init(r27593);
        mpfr_init(r27594);
        mpfr_init(r27595);
        mpfr_init(r27596);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r27588, x, MPFR_RNDN);
        mpfr_set_d(r27589, y, MPFR_RNDN);
        mpfr_set_d(r27590, z, MPFR_RNDN);
        mpfr_add(r27591, r27589, r27590, MPFR_RNDN);
        mpfr_tan(r27592, r27591, MPFR_RNDN);
        mpfr_set_d(r27593, a, MPFR_RNDN);
        mpfr_tan(r27594, r27593, MPFR_RNDN);
        mpfr_sub(r27595, r27592, r27594, MPFR_RNDN);
        mpfr_add(r27596, r27588, r27595, MPFR_RNDN);
        return mpfr_get_d(r27596, MPFR_RNDN);
}

static mpfr_t r27597, r27598, r27599, r27600, r27601, r27602, r27603, r27604, r27605, r27606, r27607, r27608, r27609, r27610, r27611, r27612, r27613;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27597);
        mpfr_init(r27598);
        mpfr_init(r27599);
        mpfr_init(r27600);
        mpfr_init(r27601);
        mpfr_init(r27602);
        mpfr_init_set_str(r27603, "1", 10, MPFR_RNDN);
        mpfr_init(r27604);
        mpfr_init_set_str(r27605, "3", 10, MPFR_RNDN);
        mpfr_init(r27606);
        mpfr_init(r27607);
        mpfr_init(r27608);
        mpfr_init(r27609);
        mpfr_init(r27610);
        mpfr_init(r27611);
        mpfr_init(r27612);
        mpfr_init(r27613);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r27597, x, MPFR_RNDN);
        mpfr_set_d(r27598, y, MPFR_RNDN);
        mpfr_tan(r27599, r27598, MPFR_RNDN);
        mpfr_set_d(r27600, z, MPFR_RNDN);
        mpfr_tan(r27601, r27600, MPFR_RNDN);
        mpfr_add(r27602, r27599, r27601, MPFR_RNDN);
        ;
        mpfr_mul(r27604, r27601, r27599, MPFR_RNDN);
        ;
        mpfr_pow(r27606, r27604, r27605, MPFR_RNDN);
        mpfr_cbrt(r27607, r27606, MPFR_RNDN);
        mpfr_sub(r27608, r27603, r27607, MPFR_RNDN);
        mpfr_div(r27609, r27602, r27608, MPFR_RNDN);
        mpfr_set_d(r27610, a, MPFR_RNDN);
        mpfr_tan(r27611, r27610, MPFR_RNDN);
        mpfr_sub(r27612, r27609, r27611, MPFR_RNDN);
        mpfr_add(r27613, r27597, r27612, MPFR_RNDN);
        return mpfr_get_d(r27613, MPFR_RNDN);
}

static mpfr_t r27614, r27615, r27616, r27617, r27618, r27619, r27620, r27621, r27622, r27623, r27624, r27625, r27626, r27627, r27628, r27629, r27630;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27614);
        mpfr_init(r27615);
        mpfr_init(r27616);
        mpfr_init(r27617);
        mpfr_init(r27618);
        mpfr_init(r27619);
        mpfr_init_set_str(r27620, "1", 10, MPFR_RNDN);
        mpfr_init(r27621);
        mpfr_init_set_str(r27622, "3", 10, MPFR_RNDN);
        mpfr_init(r27623);
        mpfr_init(r27624);
        mpfr_init(r27625);
        mpfr_init(r27626);
        mpfr_init(r27627);
        mpfr_init(r27628);
        mpfr_init(r27629);
        mpfr_init(r27630);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r27614, x, MPFR_RNDN);
        mpfr_set_d(r27615, y, MPFR_RNDN);
        mpfr_tan(r27616, r27615, MPFR_RNDN);
        mpfr_set_d(r27617, z, MPFR_RNDN);
        mpfr_tan(r27618, r27617, MPFR_RNDN);
        mpfr_add(r27619, r27616, r27618, MPFR_RNDN);
        ;
        mpfr_mul(r27621, r27618, r27616, MPFR_RNDN);
        ;
        mpfr_pow(r27623, r27621, r27622, MPFR_RNDN);
        mpfr_cbrt(r27624, r27623, MPFR_RNDN);
        mpfr_sub(r27625, r27620, r27624, MPFR_RNDN);
        mpfr_div(r27626, r27619, r27625, MPFR_RNDN);
        mpfr_set_d(r27627, a, MPFR_RNDN);
        mpfr_tan(r27628, r27627, MPFR_RNDN);
        mpfr_sub(r27629, r27626, r27628, MPFR_RNDN);
        mpfr_add(r27630, r27614, r27629, MPFR_RNDN);
        return mpfr_get_d(r27630, MPFR_RNDN);
}

