#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 r11119 = x;
        float r11120 = y;
        float r11121 = z;
        float r11122 = r11120 + r11121;
        float r11123 = tan(r11122);
        float r11124 = a;
        float r11125 = tan(r11124);
        float r11126 = r11123 - r11125;
        float r11127 = r11119 + r11126;
        return r11127;
}

double f_id(double x, double y, double z, double a) {
        double r11128 = x;
        double r11129 = y;
        double r11130 = z;
        double r11131 = r11129 + r11130;
        double r11132 = tan(r11131);
        double r11133 = a;
        double r11134 = tan(r11133);
        double r11135 = r11132 - r11134;
        double r11136 = r11128 + r11135;
        return r11136;
}


double f_of(float x, float y, float z, float a) {
        float r11137 = x;
        float r11138 = y;
        float r11139 = tan(r11138);
        float r11140 = z;
        float r11141 = tan(r11140);
        float r11142 = r11139 + r11141;
        float r11143 = a;
        float r11144 = cos(r11143);
        float r11145 = r11142 * r11144;
        float r11146 = 1;
        float r11147 = r11139 * r11141;
        float r11148 = r11146 - r11147;
        float r11149 = sin(r11143);
        float r11150 = r11148 * r11149;
        float r11151 = r11145 - r11150;
        float r11152 = r11148 * r11144;
        float r11153 = r11151 / r11152;
        float r11154 = r11137 + r11153;
        return r11154;
}

double f_od(double x, double y, double z, double a) {
        double r11155 = x;
        double r11156 = y;
        double r11157 = tan(r11156);
        double r11158 = z;
        double r11159 = tan(r11158);
        double r11160 = r11157 + r11159;
        double r11161 = a;
        double r11162 = cos(r11161);
        double r11163 = r11160 * r11162;
        double r11164 = 1;
        double r11165 = r11157 * r11159;
        double r11166 = r11164 - r11165;
        double r11167 = sin(r11161);
        double r11168 = r11166 * r11167;
        double r11169 = r11163 - r11168;
        double r11170 = r11166 * r11162;
        double r11171 = r11169 / r11170;
        double r11172 = r11155 + r11171;
        return r11172;
}

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 r11173, r11174, r11175, r11176, r11177, r11178, r11179, r11180, r11181;

void setup_mpfr_f_im() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11173);
        mpfr_init(r11174);
        mpfr_init(r11175);
        mpfr_init(r11176);
        mpfr_init(r11177);
        mpfr_init(r11178);
        mpfr_init(r11179);
        mpfr_init(r11180);
        mpfr_init(r11181);
}

double f_im(double x, double y, double z, double a) {
        mpfr_set_d(r11173, x, MPFR_RNDN);
        mpfr_set_d(r11174, y, MPFR_RNDN);
        mpfr_set_d(r11175, z, MPFR_RNDN);
        mpfr_add(r11176, r11174, r11175, MPFR_RNDN);
        mpfr_tan(r11177, r11176, MPFR_RNDN);
        mpfr_set_d(r11178, a, MPFR_RNDN);
        mpfr_tan(r11179, r11178, MPFR_RNDN);
        mpfr_sub(r11180, r11177, r11179, MPFR_RNDN);
        mpfr_add(r11181, r11173, r11180, MPFR_RNDN);
        return mpfr_get_d(r11181, MPFR_RNDN);
}

static mpfr_t r11182, r11183, r11184, r11185, r11186, r11187, r11188, r11189, r11190, r11191, r11192, r11193, r11194, r11195, r11196, r11197, r11198, r11199;

void setup_mpfr_f_fm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11182);
        mpfr_init(r11183);
        mpfr_init(r11184);
        mpfr_init(r11185);
        mpfr_init(r11186);
        mpfr_init(r11187);
        mpfr_init(r11188);
        mpfr_init(r11189);
        mpfr_init(r11190);
        mpfr_init_set_str(r11191, "1", 10, MPFR_RNDN);
        mpfr_init(r11192);
        mpfr_init(r11193);
        mpfr_init(r11194);
        mpfr_init(r11195);
        mpfr_init(r11196);
        mpfr_init(r11197);
        mpfr_init(r11198);
        mpfr_init(r11199);
}

double f_fm(double x, double y, double z, double a) {
        mpfr_set_d(r11182, x, MPFR_RNDN);
        mpfr_set_d(r11183, y, MPFR_RNDN);
        mpfr_tan(r11184, r11183, MPFR_RNDN);
        mpfr_set_d(r11185, z, MPFR_RNDN);
        mpfr_tan(r11186, r11185, MPFR_RNDN);
        mpfr_add(r11187, r11184, r11186, MPFR_RNDN);
        mpfr_set_d(r11188, a, MPFR_RNDN);
        mpfr_cos(r11189, r11188, MPFR_RNDN);
        mpfr_mul(r11190, r11187, r11189, MPFR_RNDN);
        ;
        mpfr_mul(r11192, r11184, r11186, MPFR_RNDN);
        mpfr_sub(r11193, r11191, r11192, MPFR_RNDN);
        mpfr_sin(r11194, r11188, MPFR_RNDN);
        mpfr_mul(r11195, r11193, r11194, MPFR_RNDN);
        mpfr_sub(r11196, r11190, r11195, MPFR_RNDN);
        mpfr_mul(r11197, r11193, r11189, MPFR_RNDN);
        mpfr_div(r11198, r11196, r11197, MPFR_RNDN);
        mpfr_add(r11199, r11182, r11198, MPFR_RNDN);
        return mpfr_get_d(r11199, MPFR_RNDN);
}

static mpfr_t r11200, r11201, r11202, r11203, r11204, r11205, r11206, r11207, r11208, r11209, r11210, r11211, r11212, r11213, r11214, r11215, r11216, r11217;

void setup_mpfr_f_dm() {
        mpfr_set_default_prec(1360);
        mpfr_init(r11200);
        mpfr_init(r11201);
        mpfr_init(r11202);
        mpfr_init(r11203);
        mpfr_init(r11204);
        mpfr_init(r11205);
        mpfr_init(r11206);
        mpfr_init(r11207);
        mpfr_init(r11208);
        mpfr_init_set_str(r11209, "1", 10, MPFR_RNDN);
        mpfr_init(r11210);
        mpfr_init(r11211);
        mpfr_init(r11212);
        mpfr_init(r11213);
        mpfr_init(r11214);
        mpfr_init(r11215);
        mpfr_init(r11216);
        mpfr_init(r11217);
}

double f_dm(double x, double y, double z, double a) {
        mpfr_set_d(r11200, x, MPFR_RNDN);
        mpfr_set_d(r11201, y, MPFR_RNDN);
        mpfr_tan(r11202, r11201, MPFR_RNDN);
        mpfr_set_d(r11203, z, MPFR_RNDN);
        mpfr_tan(r11204, r11203, MPFR_RNDN);
        mpfr_add(r11205, r11202, r11204, MPFR_RNDN);
        mpfr_set_d(r11206, a, MPFR_RNDN);
        mpfr_cos(r11207, r11206, MPFR_RNDN);
        mpfr_mul(r11208, r11205, r11207, MPFR_RNDN);
        ;
        mpfr_mul(r11210, r11202, r11204, MPFR_RNDN);
        mpfr_sub(r11211, r11209, r11210, MPFR_RNDN);
        mpfr_sin(r11212, r11206, MPFR_RNDN);
        mpfr_mul(r11213, r11211, r11212, MPFR_RNDN);
        mpfr_sub(r11214, r11208, r11213, MPFR_RNDN);
        mpfr_mul(r11215, r11211, r11207, MPFR_RNDN);
        mpfr_div(r11216, r11214, r11215, MPFR_RNDN);
        mpfr_add(r11217, r11200, r11216, MPFR_RNDN);
        return mpfr_get_d(r11217, MPFR_RNDN);
}

