#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 r10566 = x;
        float r10567 = y;
        float r10568 = z;
        float r10569 = r10567 + r10568;
        float r10570 = tan(r10569);
        float r10571 = a;
        float r10572 = tan(r10571);
        float r10573 = r10570 - r10572;
        float r10574 = r10566 + r10573;
        return r10574;
}

double f_id(double x, double y, double z, double a) {
        double r10575 = x;
        double r10576 = y;
        double r10577 = z;
        double r10578 = r10576 + r10577;
        double r10579 = tan(r10578);
        double r10580 = a;
        double r10581 = tan(r10580);
        double r10582 = r10579 - r10581;
        double r10583 = r10575 + r10582;
        return r10583;
}


double f_of(float x, float y, float z, float a) {
        float r10584 = y;
        float r10585 = tan(r10584);
        float r10586 = z;
        float r10587 = tan(r10586);
        float r10588 = r10585 + r10587;
        float r10589 = 1.0f;
        float r10590 = r10587 * r10585;
        float r10591 = sin(r10586);
        float r10592 = r10591 * r10585;
        float r10593 = r10592 * r10592;
        float r10594 = cos(r10586);
        float r10595 = r10594 * r10594;
        float r10596 = r10593 / r10595;
        float r10597 = r10590 * r10596;
        float r10598 = cbrt(r10597);
        float r10599 = r10589 - r10598;
        float r10600 = r10588 / r10599;
        float r10601 = a;
        float r10602 = tan(r10601);
        float r10603 = r10600 - r10602;
        float r10604 = x;
        float r10605 = r10603 + r10604;
        return r10605;
}

double f_od(double x, double y, double z, double a) {
        double r10606 = y;
        double r10607 = tan(r10606);
        double r10608 = z;
        double r10609 = tan(r10608);
        double r10610 = r10607 + r10609;
        double r10611 = 1.0;
        double r10612 = r10609 * r10607;
        double r10613 = sin(r10608);
        double r10614 = r10613 * r10607;
        double r10615 = r10614 * r10614;
        double r10616 = cos(r10608);
        double r10617 = r10616 * r10616;
        double r10618 = r10615 / r10617;
        double r10619 = r10612 * r10618;
        double r10620 = cbrt(r10619);
        double r10621 = r10611 - r10620;
        double r10622 = r10610 / r10621;
        double r10623 = a;
        double r10624 = tan(r10623);
        double r10625 = r10622 - r10624;
        double r10626 = x;
        double r10627 = r10625 + r10626;
        return r10627;
}

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 r10628, r10629, r10630, r10631, r10632, r10633, r10634, r10635, r10636;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10628);
        mpfr_init(r10629);
        mpfr_init(r10630);
        mpfr_init(r10631);
        mpfr_init(r10632);
        mpfr_init(r10633);
        mpfr_init(r10634);
        mpfr_init(r10635);
        mpfr_init(r10636);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r10628, x, MPFR_RNDN);
        mpfr_set_d(r10629, y, MPFR_RNDN);
        mpfr_set_d(r10630, z, MPFR_RNDN);
        mpfr_add(r10631, r10629, r10630, MPFR_RNDN);
        mpfr_tan(r10632, r10631, MPFR_RNDN);
        mpfr_set_d(r10633, a, MPFR_RNDN);
        mpfr_tan(r10634, r10633, MPFR_RNDN);
        mpfr_sub(r10635, r10632, r10634, MPFR_RNDN);
        mpfr_add(r10636, r10628, r10635, MPFR_RNDN);
        return mpfr_get_d(r10636, MPFR_RNDN);
}

static mpfr_t r10637, r10638, r10639, r10640, r10641, r10642, r10643, r10644, r10645, r10646, r10647, r10648, r10649, r10650, r10651, r10652, r10653, r10654, r10655, r10656, r10657, r10658;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10637);
        mpfr_init(r10638);
        mpfr_init(r10639);
        mpfr_init(r10640);
        mpfr_init(r10641);
        mpfr_init_set_str(r10642, "1", 10, MPFR_RNDN);
        mpfr_init(r10643);
        mpfr_init(r10644);
        mpfr_init(r10645);
        mpfr_init(r10646);
        mpfr_init(r10647);
        mpfr_init(r10648);
        mpfr_init(r10649);
        mpfr_init(r10650);
        mpfr_init(r10651);
        mpfr_init(r10652);
        mpfr_init(r10653);
        mpfr_init(r10654);
        mpfr_init(r10655);
        mpfr_init(r10656);
        mpfr_init(r10657);
        mpfr_init(r10658);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r10637, y, MPFR_RNDN);
        mpfr_tan(r10638, r10637, MPFR_RNDN);
        mpfr_set_d(r10639, z, MPFR_RNDN);
        mpfr_tan(r10640, r10639, MPFR_RNDN);
        mpfr_add(r10641, r10638, r10640, MPFR_RNDN);
        ;
        mpfr_mul(r10643, r10640, r10638, MPFR_RNDN);
        mpfr_sin(r10644, r10639, MPFR_RNDN);
        mpfr_mul(r10645, r10644, r10638, MPFR_RNDN);
        mpfr_mul(r10646, r10645, r10645, MPFR_RNDN);
        mpfr_cos(r10647, r10639, MPFR_RNDN);
        mpfr_mul(r10648, r10647, r10647, MPFR_RNDN);
        mpfr_div(r10649, r10646, r10648, MPFR_RNDN);
        mpfr_mul(r10650, r10643, r10649, MPFR_RNDN);
        mpfr_cbrt(r10651, r10650, MPFR_RNDN);
        mpfr_sub(r10652, r10642, r10651, MPFR_RNDN);
        mpfr_div(r10653, r10641, r10652, MPFR_RNDN);
        mpfr_set_d(r10654, a, MPFR_RNDN);
        mpfr_tan(r10655, r10654, MPFR_RNDN);
        mpfr_sub(r10656, r10653, r10655, MPFR_RNDN);
        mpfr_set_d(r10657, x, MPFR_RNDN);
        mpfr_add(r10658, r10656, r10657, MPFR_RNDN);
        return mpfr_get_d(r10658, MPFR_RNDN);
}

static mpfr_t r10659, r10660, r10661, r10662, r10663, r10664, r10665, r10666, r10667, r10668, r10669, r10670, r10671, r10672, r10673, r10674, r10675, r10676, r10677, r10678, r10679, r10680;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r10659);
        mpfr_init(r10660);
        mpfr_init(r10661);
        mpfr_init(r10662);
        mpfr_init(r10663);
        mpfr_init_set_str(r10664, "1", 10, MPFR_RNDN);
        mpfr_init(r10665);
        mpfr_init(r10666);
        mpfr_init(r10667);
        mpfr_init(r10668);
        mpfr_init(r10669);
        mpfr_init(r10670);
        mpfr_init(r10671);
        mpfr_init(r10672);
        mpfr_init(r10673);
        mpfr_init(r10674);
        mpfr_init(r10675);
        mpfr_init(r10676);
        mpfr_init(r10677);
        mpfr_init(r10678);
        mpfr_init(r10679);
        mpfr_init(r10680);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r10659, y, MPFR_RNDN);
        mpfr_tan(r10660, r10659, MPFR_RNDN);
        mpfr_set_d(r10661, z, MPFR_RNDN);
        mpfr_tan(r10662, r10661, MPFR_RNDN);
        mpfr_add(r10663, r10660, r10662, MPFR_RNDN);
        ;
        mpfr_mul(r10665, r10662, r10660, MPFR_RNDN);
        mpfr_sin(r10666, r10661, MPFR_RNDN);
        mpfr_mul(r10667, r10666, r10660, MPFR_RNDN);
        mpfr_mul(r10668, r10667, r10667, MPFR_RNDN);
        mpfr_cos(r10669, r10661, MPFR_RNDN);
        mpfr_mul(r10670, r10669, r10669, MPFR_RNDN);
        mpfr_div(r10671, r10668, r10670, MPFR_RNDN);
        mpfr_mul(r10672, r10665, r10671, MPFR_RNDN);
        mpfr_cbrt(r10673, r10672, MPFR_RNDN);
        mpfr_sub(r10674, r10664, r10673, MPFR_RNDN);
        mpfr_div(r10675, r10663, r10674, MPFR_RNDN);
        mpfr_set_d(r10676, a, MPFR_RNDN);
        mpfr_tan(r10677, r10676, MPFR_RNDN);
        mpfr_sub(r10678, r10675, r10677, MPFR_RNDN);
        mpfr_set_d(r10679, x, MPFR_RNDN);
        mpfr_add(r10680, r10678, r10679, MPFR_RNDN);
        return mpfr_get_d(r10680, MPFR_RNDN);
}

