#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 r27131 = x;
        float r27132 = y;
        float r27133 = z;
        float r27134 = r27132 + r27133;
        float r27135 = tan(r27134);
        float r27136 = a;
        float r27137 = tan(r27136);
        float r27138 = r27135 - r27137;
        float r27139 = r27131 + r27138;
        return r27139;
}

double f_id(double x, double y, double z, double a) {
        double r27140 = x;
        double r27141 = y;
        double r27142 = z;
        double r27143 = r27141 + r27142;
        double r27144 = tan(r27143);
        double r27145 = a;
        double r27146 = tan(r27145);
        double r27147 = r27144 - r27146;
        double r27148 = r27140 + r27147;
        return r27148;
}


double f_of(float x, float y, float z, float a) {
        float r27149 = x;
        float r27150 = y;
        float r27151 = tan(r27150);
        float r27152 = z;
        float r27153 = tan(r27152);
        float r27154 = r27151 + r27153;
        float r27155 = a;
        float r27156 = cos(r27155);
        float r27157 = r27154 * r27156;
        float r27158 = 1;
        float r27159 = r27151 * r27153;
        float r27160 = r27158 - r27159;
        float r27161 = sin(r27155);
        float r27162 = r27160 * r27161;
        float r27163 = r27157 - r27162;
        float r27164 = r27160 * r27156;
        float r27165 = r27163 / r27164;
        float r27166 = r27149 + r27165;
        return r27166;
}

double f_od(double x, double y, double z, double a) {
        double r27167 = x;
        double r27168 = y;
        double r27169 = tan(r27168);
        double r27170 = z;
        double r27171 = tan(r27170);
        double r27172 = r27169 + r27171;
        double r27173 = a;
        double r27174 = cos(r27173);
        double r27175 = r27172 * r27174;
        double r27176 = 1;
        double r27177 = r27169 * r27171;
        double r27178 = r27176 - r27177;
        double r27179 = sin(r27173);
        double r27180 = r27178 * r27179;
        double r27181 = r27175 - r27180;
        double r27182 = r27178 * r27174;
        double r27183 = r27181 / r27182;
        double r27184 = r27167 + r27183;
        return r27184;
}

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 r27185, r27186, r27187, r27188, r27189, r27190, r27191, r27192, r27193;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27185);
        mpfr_init(r27186);
        mpfr_init(r27187);
        mpfr_init(r27188);
        mpfr_init(r27189);
        mpfr_init(r27190);
        mpfr_init(r27191);
        mpfr_init(r27192);
        mpfr_init(r27193);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r27185, x, MPFR_RNDN);
        mpfr_set_d(r27186, y, MPFR_RNDN);
        mpfr_set_d(r27187, z, MPFR_RNDN);
        mpfr_add(r27188, r27186, r27187, MPFR_RNDN);
        mpfr_tan(r27189, r27188, MPFR_RNDN);
        mpfr_set_d(r27190, a, MPFR_RNDN);
        mpfr_tan(r27191, r27190, MPFR_RNDN);
        mpfr_sub(r27192, r27189, r27191, MPFR_RNDN);
        mpfr_add(r27193, r27185, r27192, MPFR_RNDN);
        return mpfr_get_d(r27193, MPFR_RNDN);
}

static mpfr_t r27194, r27195, r27196, r27197, r27198, r27199, r27200, r27201, r27202, r27203, r27204, r27205, r27206, r27207, r27208, r27209, r27210, r27211;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27194);
        mpfr_init(r27195);
        mpfr_init(r27196);
        mpfr_init(r27197);
        mpfr_init(r27198);
        mpfr_init(r27199);
        mpfr_init(r27200);
        mpfr_init(r27201);
        mpfr_init(r27202);
        mpfr_init_set_str(r27203, "1", 10, MPFR_RNDN);
        mpfr_init(r27204);
        mpfr_init(r27205);
        mpfr_init(r27206);
        mpfr_init(r27207);
        mpfr_init(r27208);
        mpfr_init(r27209);
        mpfr_init(r27210);
        mpfr_init(r27211);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r27194, x, MPFR_RNDN);
        mpfr_set_d(r27195, y, MPFR_RNDN);
        mpfr_tan(r27196, r27195, MPFR_RNDN);
        mpfr_set_d(r27197, z, MPFR_RNDN);
        mpfr_tan(r27198, r27197, MPFR_RNDN);
        mpfr_add(r27199, r27196, r27198, MPFR_RNDN);
        mpfr_set_d(r27200, a, MPFR_RNDN);
        mpfr_cos(r27201, r27200, MPFR_RNDN);
        mpfr_mul(r27202, r27199, r27201, MPFR_RNDN);
        ;
        mpfr_mul(r27204, r27196, r27198, MPFR_RNDN);
        mpfr_sub(r27205, r27203, r27204, MPFR_RNDN);
        mpfr_sin(r27206, r27200, MPFR_RNDN);
        mpfr_mul(r27207, r27205, r27206, MPFR_RNDN);
        mpfr_sub(r27208, r27202, r27207, MPFR_RNDN);
        mpfr_mul(r27209, r27205, r27201, MPFR_RNDN);
        mpfr_div(r27210, r27208, r27209, MPFR_RNDN);
        mpfr_add(r27211, r27194, r27210, MPFR_RNDN);
        return mpfr_get_d(r27211, MPFR_RNDN);
}

static mpfr_t r27212, r27213, r27214, r27215, r27216, r27217, r27218, r27219, r27220, r27221, r27222, r27223, r27224, r27225, r27226, r27227, r27228, r27229;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r27212);
        mpfr_init(r27213);
        mpfr_init(r27214);
        mpfr_init(r27215);
        mpfr_init(r27216);
        mpfr_init(r27217);
        mpfr_init(r27218);
        mpfr_init(r27219);
        mpfr_init(r27220);
        mpfr_init_set_str(r27221, "1", 10, MPFR_RNDN);
        mpfr_init(r27222);
        mpfr_init(r27223);
        mpfr_init(r27224);
        mpfr_init(r27225);
        mpfr_init(r27226);
        mpfr_init(r27227);
        mpfr_init(r27228);
        mpfr_init(r27229);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r27212, x, MPFR_RNDN);
        mpfr_set_d(r27213, y, MPFR_RNDN);
        mpfr_tan(r27214, r27213, MPFR_RNDN);
        mpfr_set_d(r27215, z, MPFR_RNDN);
        mpfr_tan(r27216, r27215, MPFR_RNDN);
        mpfr_add(r27217, r27214, r27216, MPFR_RNDN);
        mpfr_set_d(r27218, a, MPFR_RNDN);
        mpfr_cos(r27219, r27218, MPFR_RNDN);
        mpfr_mul(r27220, r27217, r27219, MPFR_RNDN);
        ;
        mpfr_mul(r27222, r27214, r27216, MPFR_RNDN);
        mpfr_sub(r27223, r27221, r27222, MPFR_RNDN);
        mpfr_sin(r27224, r27218, MPFR_RNDN);
        mpfr_mul(r27225, r27223, r27224, MPFR_RNDN);
        mpfr_sub(r27226, r27220, r27225, MPFR_RNDN);
        mpfr_mul(r27227, r27223, r27219, MPFR_RNDN);
        mpfr_div(r27228, r27226, r27227, MPFR_RNDN);
        mpfr_add(r27229, r27212, r27228, MPFR_RNDN);
        return mpfr_get_d(r27229, MPFR_RNDN);
}

